On Tue, 19 Jan 2016 10:09:01 +0000, Ola Fosheim Grøstad wrote: > On Monday, 18 January 2016 at 05:59:15 UTC, tcak wrote: >> Is there anything like this in Phobos, or shall I start my own >> implementation? > > It isn't really clear to me what you are trying to do. IIRC the C++ > deque is usually implemented as an array of pointers to fixed sized > memory blocks. > > Is that what you are trying to achieve?
It's a rope-style data structure, but for void[] rather than strings. https://en.wikipedia.org/wiki/Rope_(data_structure) An interesting property of this is that, while you can issue pointers to memory within this rope, it takes caution to ensure that a pointer remains within the rope. Instead of just incrementing the pointer, you would need to call a function on the rope to ensure that it promotes the pointer to the next memory segment as appropriate. This also means you can't store a multibyte object in the rope and use it in place. (Consider: the first block is one byte, the second is seven bytes; you store a ulong in the rope.) You must always copy it out, use it, and optionally store it back. A friendly API would have convenience methods for mutating structured data within the rope. This is why just using joiner isn't that friendly, even if joiner did have opSlice, opIndex, etc.