fork download
  1. diff -r -c original_src\phobos\std\container.d src\phobos\std\container.d
  2. *** original_src\phobos\std\container.d Thu Apr 12 16:11:08 2012
  3. --- src\phobos\std\container.d Sat Apr 21 19:47:10 2012
  4. ***************
  5. *** 1762,1767 ****
  6. --- 1762,1770 ----
  7. @property size_t length() const {
  8. return _b - _a;
  9. }
  10. +
  11. + // Array.replace から参照されてるので追加しました。
  12. + @property T* ptr() { return &_outer._data._payload[_a]; }
  13. }
  14.  
  15. /**
  16. ***************
  17. *** 2161,2167 ****
  18.   size_t insertAfter(Stuff)(Range r, Stuff stuff)
  19.   {
  20.   // TODO: optimize
  21. ! enforce(_data);
  22.   immutable offset = r.ptr + r.length - _data._payload.ptr;
  23.   enforce(offset <= length);
  24.   auto result = insertBack(stuff);
  25. --- 2164,2170 ----
  26.   size_t insertAfter(Stuff)(Range r, Stuff stuff)
  27.   {
  28.   // TODO: optimize
  29. ! enforce(_data._payload); //< enforce(_data)だと意味不明なエラーがたくさんでましたのでかえました。
  30.   immutable offset = r.ptr + r.length - _data._payload.ptr;
  31.   enforce(offset <= length);
  32.   auto result = insertBack(stuff);
  33. ***************
  34. *** 2174,2180 ****
  35.   size_t replace(Stuff)(Range r, Stuff stuff)
  36.   if (isInputRange!Stuff && isImplicitlyConvertible!(ElementType!Stuff, T))
  37.   {
  38. ! enforce(_data);
  39.   immutable offset = r.ptr - _data._payload.ptr;
  40.   enforce(offset <= length);
  41.   size_t result;
  42. --- 2177,2183 ----
  43.   size_t replace(Stuff)(Range r, Stuff stuff)
  44.   if (isInputRange!Stuff && isImplicitlyConvertible!(ElementType!Stuff, T))
  45.   {
  46. ! enforce(_data._payload);
  47.   immutable offset = r.ptr - _data._payload.ptr;
  48.   enforce(offset <= length);
  49.   size_t result;
  50. ***************
  51. *** 2183,2196 ****
  52.   if (r.empty)
  53.   {
  54.   // append the rest
  55. ! return result + insertBack(stuff);
  56.   }
  57.   r.front = stuff.front;
  58.   r.popFront();
  59.   ++result;
  60.   }
  61.   // Remove remaining stuff in r
  62. ! remove(r);
  63.   return result;
  64.   }
  65.  
  66. --- 2186,2200 ----
  67.   if (r.empty)
  68.   {
  69.   // append the rest
  70. ! return result + insertBefore( r, stuff); //< こっちの方がイイと思うの
  71.   }
  72.   r.front = stuff.front;
  73.   r.popFront();
  74.   ++result;
  75.   }
  76.   // Remove remaining stuff in r
  77. ! // remove(r) だと、std.algorithm.remove が先にヒットしてしまう。
  78. ! linearRemove(r);
  79.   return result;
  80.   }
  81.  
  82. ***************
  83. *** 2206,2212 ****
  84.   {
  85.   r.front = stuff;
  86.   r.popFront();
  87. ! remove(r);
  88.   }
  89.   return 1;
  90.   }
  91. --- 2210,2216 ----
  92.   {
  93.   r.front = stuff;
  94.   r.popFront();
  95. ! linearRemove(r);
  96.   }
  97.   return 1;
  98.   }
  99.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty