diff -r -c original_src\phobos\std\container.d src\phobos\std\container.d
*** original_src\phobos\std\container.d Thu Apr 12 16:11:08 2012
--- src\phobos\std\container.d Sat Apr 21 19:47:10 2012
***************
*** 1762,1767 ****
--- 1762,1770 ----
@property size_t length() const {
return _b - _a;
}
+
+ // Array.replace から参照されてるので追加しました。
+ @property T* ptr() { return &_outer._data._payload[_a]; }
}
/**
***************
*** 2161,2167 ****
size_t insertAfter(Stuff)(Range r, Stuff stuff)
{
// TODO: optimize
! enforce(_data);
immutable offset = r.ptr + r.length - _data._payload.ptr;
enforce(offset <= length);
auto result = insertBack(stuff);
--- 2164,2170 ----
size_t insertAfter(Stuff)(Range r, Stuff stuff)
{
// TODO: optimize
! enforce(_data._payload); //< enforce(_data)だと意味不明なエラーがたくさんでましたのでかえました。
immutable offset = r.ptr + r.length - _data._payload.ptr;
enforce(offset <= length);
auto result = insertBack(stuff);
***************
*** 2174,2180 ****
size_t replace(Stuff)(Range r, Stuff stuff)
if (isInputRange!Stuff && isImplicitlyConvertible!(ElementType!Stuff, T))
{
! enforce(_data);
immutable offset = r.ptr - _data._payload.ptr;
enforce(offset <= length);
size_t result;
--- 2177,2183 ----
size_t replace(Stuff)(Range r, Stuff stuff)
if (isInputRange!Stuff && isImplicitlyConvertible!(ElementType!Stuff, T))
{
! enforce(_data._payload);
immutable offset = r.ptr - _data._payload.ptr;
enforce(offset <= length);
size_t result;
***************
*** 2183,2196 ****
if (r.empty)
{
// append the rest
! return result + insertBack(stuff);
}
r.front = stuff.front;
r.popFront();
++result;
}
// Remove remaining stuff in r
! remove(r);
return result;
}
--- 2186,2200 ----
if (r.empty)
{
// append the rest
! return result + insertBefore( r, stuff); //< こっちの方がイイと思うの
}
r.front = stuff.front;
r.popFront();
++result;
}
// Remove remaining stuff in r
! // remove(r) だと、std.algorithm.remove が先にヒットしてしまう。
! linearRemove(r);
return result;
}
***************
*** 2206,2212 ****
{
r.front = stuff;
r.popFront();
! remove(r);
}
return 1;
}
--- 2210,2216 ----
{
r.front = stuff;
r.popFront();
! linearRemove(r);
}
return 1;
}
ZGlmZiAtciAtYyBvcmlnaW5hbF9zcmNccGhvYm9zXHN0ZFxjb250YWluZXIuZCBzcmNccGhvYm9zXHN0ZFxjb250YWluZXIuZAoqKiogb3JpZ2luYWxfc3JjXHBob2Jvc1xzdGRcY29udGFpbmVyLmQJVGh1IEFwciAxMiAxNjoxMTowOCAyMDEyCi0tLSBzcmNccGhvYm9zXHN0ZFxjb250YWluZXIuZAlTYXQgQXByIDIxIDE5OjQ3OjEwIDIwMTIKKioqKioqKioqKioqKioqCioqKiAxNzYyLDE3NjcgKioqKgotLS0gMTc2MiwxNzcwIC0tLS0KICAgICAgICAgIEBwcm9wZXJ0eSBzaXplX3QgbGVuZ3RoKCkgY29uc3QgewogICAgICAgICAgICAgIHJldHVybiBfYiAtIF9hOwogICAgICAgICAgfQorIAorICAgICAgICAgLy8gQXJyYXkucmVwbGFjZSDjgYvjgonlj4LnhafjgZXjgozjgabjgovjga7jgafov73liqDjgZfjgb7jgZfjgZ/jgIIKKyAgICAgICAgIEBwcm9wZXJ0eSBUKiBwdHIoKSB7IHJldHVybiAmX291dGVyLl9kYXRhLl9wYXlsb2FkW19hXTsgfQogICAgICB9CiAgCiAgLyoqCioqKioqKioqKioqKioqKgoqKiogMjE2MSwyMTY3ICoqKioKICAgICAgc2l6ZV90IGluc2VydEFmdGVyKFN0dWZmKShSYW5nZSByLCBTdHVmZiBzdHVmZikKICAgICAgewogICAgICAgICAgLy8gVE9ETzogb3B0aW1pemUKISAgICAgICAgIGVuZm9yY2UoX2RhdGEpOwogICAgICAgICAgaW1tdXRhYmxlIG9mZnNldCA9IHIucHRyICsgci5sZW5ndGggLSBfZGF0YS5fcGF5bG9hZC5wdHI7CiAgICAgICAgICBlbmZvcmNlKG9mZnNldCA8PSBsZW5ndGgpOwogICAgICAgICAgYXV0byByZXN1bHQgPSBpbnNlcnRCYWNrKHN0dWZmKTsKLS0tIDIxNjQsMjE3MCAtLS0tCiAgICAgIHNpemVfdCBpbnNlcnRBZnRlcihTdHVmZikoUmFuZ2UgciwgU3R1ZmYgc3R1ZmYpCiAgICAgIHsKICAgICAgICAgIC8vIFRPRE86IG9wdGltaXplCiEgICAgICAgICBlbmZvcmNlKF9kYXRhLl9wYXlsb2FkKTsgLy88IGVuZm9yY2UoX2RhdGEp44Gg44Go5oSP5ZGz5LiN5piO44Gq44Ko44Op44O844GM44Gf44GP44GV44KT44Gn44G+44GX44Gf44Gu44Gn44GL44GI44G+44GX44Gf44CCCiAgICAgICAgICBpbW11dGFibGUgb2Zmc2V0ID0gci5wdHIgKyByLmxlbmd0aCAtIF9kYXRhLl9wYXlsb2FkLnB0cjsKICAgICAgICAgIGVuZm9yY2Uob2Zmc2V0IDw9IGxlbmd0aCk7CiAgICAgICAgICBhdXRvIHJlc3VsdCA9IGluc2VydEJhY2soc3R1ZmYpOwoqKioqKioqKioqKioqKioKKioqIDIxNzQsMjE4MCAqKioqCiAgICAgIHNpemVfdCByZXBsYWNlKFN0dWZmKShSYW5nZSByLCBTdHVmZiBzdHVmZikKICAgICAgaWYgKGlzSW5wdXRSYW5nZSFTdHVmZiAmJiBpc0ltcGxpY2l0bHlDb252ZXJ0aWJsZSEoRWxlbWVudFR5cGUhU3R1ZmYsIFQpKQogICAgICB7CiEgICAgICAgICBlbmZvcmNlKF9kYXRhKTsKICAgICAgICAgIGltbXV0YWJsZSBvZmZzZXQgPSByLnB0ciAtIF9kYXRhLl9wYXlsb2FkLnB0cjsKICAgICAgICAgIGVuZm9yY2Uob2Zmc2V0IDw9IGxlbmd0aCk7CiAgICAgICAgICBzaXplX3QgcmVzdWx0OwotLS0gMjE3NywyMTgzIC0tLS0KICAgICAgc2l6ZV90IHJlcGxhY2UoU3R1ZmYpKFJhbmdlIHIsIFN0dWZmIHN0dWZmKQogICAgICBpZiAoaXNJbnB1dFJhbmdlIVN0dWZmICYmIGlzSW1wbGljaXRseUNvbnZlcnRpYmxlIShFbGVtZW50VHlwZSFTdHVmZiwgVCkpCiAgICAgIHsKISAgICAgICAgIGVuZm9yY2UoX2RhdGEuX3BheWxvYWQpOwogICAgICAgICAgaW1tdXRhYmxlIG9mZnNldCA9IHIucHRyIC0gX2RhdGEuX3BheWxvYWQucHRyOwogICAgICAgICAgZW5mb3JjZShvZmZzZXQgPD0gbGVuZ3RoKTsKICAgICAgICAgIHNpemVfdCByZXN1bHQ7CioqKioqKioqKioqKioqKgoqKiogMjE4MywyMTk2ICoqKioKICAgICAgICAgICAgICBpZiAoci5lbXB0eSkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIC8vIGFwcGVuZCB0aGUgcmVzdAohICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgaW5zZXJ0QmFjayhzdHVmZik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHIuZnJvbnQgPSBzdHVmZi5mcm9udDsKICAgICAgICAgICAgICByLnBvcEZyb250KCk7CiAgICAgICAgICAgICAgKytyZXN1bHQ7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBSZW1vdmUgcmVtYWluaW5nIHN0dWZmIGluIHIKISAgICAgICAgIHJlbW92ZShyKTsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAKLS0tIDIxODYsMjIwMCAtLS0tCiAgICAgICAgICAgICAgaWYgKHIuZW1wdHkpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAvLyBhcHBlbmQgdGhlIHJlc3QKISAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIGluc2VydEJlZm9yZSggciwgc3R1ZmYpOyAvLzwg44GT44Gj44Gh44Gu5pa544GM44Kk44Kk44Go5oCd44GG44GuCiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHIuZnJvbnQgPSBzdHVmZi5mcm9udDsKICAgICAgICAgICAgICByLnBvcEZyb250KCk7CiAgICAgICAgICAgICAgKytyZXN1bHQ7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBSZW1vdmUgcmVtYWluaW5nIHN0dWZmIGluIHIKISAgICAgICAgIC8vIHJlbW92ZShyKSDjgaDjgajjgIFzdGQuYWxnb3JpdGhtLnJlbW92ZSDjgYzlhYjjgavjg5Ljg4Pjg4jjgZfjgabjgZfjgb7jgYbjgIIKISAgICAgICAgIGxpbmVhclJlbW92ZShyKTsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAKKioqKioqKioqKioqKioqCioqKiAyMjA2LDIyMTIgKioqKgogICAgICAgICAgewogICAgICAgICAgICAgIHIuZnJvbnQgPSBzdHVmZjsKICAgICAgICAgICAgICByLnBvcEZyb250KCk7CiEgICAgICAgICAgICAgcmVtb3ZlKHIpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIDE7CiAgICAgIH0KLS0tIDIyMTAsMjIxNiAtLS0tCiAgICAgICAgICB7CiAgICAgICAgICAgICAgci5mcm9udCA9IHN0dWZmOwogICAgICAgICAgICAgIHIucG9wRnJvbnQoKTsKISAgICAgICAgICAgICBsaW5lYXJSZW1vdmUocik7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gMTsKICAgICAgfQo=