DList and SList missing length property?

monarch_dodra monarchdodra at gmail.com
Tue May 28 11:51:55 PDT 2013


On Tuesday, 28 May 2013 at 18:16:48 UTC, Jonathan M Davis wrote:
> Now, that being said, I don't see a splice operation on either 
> SList or DList
> (and I don't think that splicing an SList can be done in O(1) 
> anyway), so it
> would appear that the implementation is optimizing for an 
> operation that it
> doesn't currently support.

SList can be spliced, but the semantics are a bit more 
complicated. In most cases, if you need to splice, you'd use a 
DList anyway: SList is really for particular use cases.

I think that if splice is not in DList, it is only because it is 
not *yet* in DList. I have an implementation ready to submit, 
which adheres to Andrei's proposed container semantics. I have 
not yet submitted it though, because fixing DList is more 
important that inserting more functionality.

It's current semantics are neither value nor ref. It's... 
something else. My fault for inserting it when trying to fix 
previous clusterfuck. I've since submitted fix that gives it 
classic semantics, but it's kind of just sitting there...

We should *really* see to getting it (or something else) pulled 
through.

> The same situation exists with C++'s std::list type though - 
> size() is O(n)
> and splicing is O(1). However, we opted for not having 
> containers implement
> inefficient operations like that (which C++ mostly did as well, 
> but not in this
> case).
>
> - Jonathan M Davis

That was in C++03. In C++11, length was reduced to 0(1). And 
splice was increased to 0(N) (I think, I don't remember the exact 
details, but it was definitely changed).

I'll look up the exact requirement later tonight.


More information about the Digitalmars-d mailing list