Add SList constructors
This commit is contained in:
parent
093d499729
commit
f4145abfd1
@ -190,6 +190,63 @@ struct SList(T)
|
|||||||
this.allocator_ = allocator;
|
this.allocator_ = allocator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes this list from another one.
|
||||||
|
*
|
||||||
|
* If $(D_PARAM init) is passed by value, it won't be copied, but moved.
|
||||||
|
* If the allocator of ($D_PARAM init) matches $(D_PARAM allocator),
|
||||||
|
* $(D_KEYWORD this) will just take the ownership over $(D_PARAM init)'s
|
||||||
|
* storage, otherwise, the storage will be allocated with
|
||||||
|
* $(D_PARAM allocator) and all elements will be moved;
|
||||||
|
* $(D_PARAM init) will be destroyed at the end.
|
||||||
|
*
|
||||||
|
* If $(D_PARAM init) is passed by reference, it will be copied.
|
||||||
|
*
|
||||||
|
* Params:
|
||||||
|
* init = Source list.
|
||||||
|
* allocator = Allocator.
|
||||||
|
*/
|
||||||
|
this(ref SList init, shared Allocator allocator = defaultAllocator)
|
||||||
|
{
|
||||||
|
this(init[], allocator);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Ditto.
|
||||||
|
this(SList init, shared Allocator allocator = defaultAllocator) @trusted
|
||||||
|
{
|
||||||
|
this(allocator);
|
||||||
|
if (allocator is init.allocator)
|
||||||
|
{
|
||||||
|
head = init.head;
|
||||||
|
init.head = null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Entry* next;
|
||||||
|
for (auto current = init.head; current !is null; current = current.next)
|
||||||
|
{
|
||||||
|
if (head is null)
|
||||||
|
{
|
||||||
|
head = allocator.make!Entry(move(current.content));
|
||||||
|
next = head;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
next.next = allocator.make!Entry(move(current.content));
|
||||||
|
next = next.next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
@safe @nogc unittest
|
||||||
|
{
|
||||||
|
auto l1 = SList!int([5, 1, 234]);
|
||||||
|
auto l2 = SList!int(l1);
|
||||||
|
assert(l1 == l2);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes all elements from the list.
|
* Removes all elements from the list.
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user