Add algorithm.mutation.swap
This commit is contained in:
parent
392cdcf192
commit
12fb9ff9f6
@ -204,3 +204,30 @@ T move(T)(ref T source)
|
||||
move(x, x);
|
||||
assert(x == 5);
|
||||
}
|
||||
|
||||
/**
|
||||
* Exchanges the values of $(D_PARAM a) and $(D_PARAM b).
|
||||
*
|
||||
* $(D_PSYMBOL swap) moves the contents of $(D_PARAM a) and $(D_PARAM b)
|
||||
* without calling its postblits or destructors.
|
||||
*
|
||||
* Params:
|
||||
* a = The first object.
|
||||
* a = The second object.
|
||||
*/
|
||||
void swap(T)(ref T a, ref T b) @trusted
|
||||
{
|
||||
T tmp = void;
|
||||
moveEmplace(a, tmp);
|
||||
moveEmplace(b, a);
|
||||
moveEmplace(tmp, b);
|
||||
}
|
||||
|
||||
///
|
||||
@nogc nothrow pure @safe unittest
|
||||
{
|
||||
int a = 3, b = 5;
|
||||
swap(a, b);
|
||||
assert(a == 5);
|
||||
assert(b == 3);
|
||||
}
|
||||
|
@ -20,9 +20,6 @@ import std.algorithm.mutation : bringToFront,
|
||||
copy,
|
||||
fill,
|
||||
initializeAll,
|
||||
moveEmplaceAll,
|
||||
moveAll,
|
||||
swap,
|
||||
uninitializedFill;
|
||||
import std.meta;
|
||||
import tanya.algorithm.mutation;
|
||||
@ -272,7 +269,10 @@ struct Array(T)
|
||||
{
|
||||
// Move each element.
|
||||
reserve(init.length_);
|
||||
moveEmplaceAll(init.data[0 .. init.length_], this.data[0 .. init.length_]);
|
||||
foreach (ref target; this.data[0 .. init.length_])
|
||||
{
|
||||
moveEmplace(*init.data++, target);
|
||||
}
|
||||
this.length_ = init.length_;
|
||||
// Destructor of init should destroy it here.
|
||||
}
|
||||
@ -661,7 +661,12 @@ struct Array(T)
|
||||
body
|
||||
{
|
||||
auto end = this.data + this.length;
|
||||
moveAll(Range(this, r.end, end), Range(this, r.begin, end));
|
||||
auto source = Range(this, r.end, end);
|
||||
auto target = Range(this, r.begin, end);
|
||||
for (; !source.empty; source.popFront(), target.popFront())
|
||||
{
|
||||
move(source.front, target.front);
|
||||
}
|
||||
length = length - r.length;
|
||||
return Range(this, r.begin, this.data + length);
|
||||
}
|
||||
|
@ -15,7 +15,6 @@
|
||||
module tanya.container.list;
|
||||
|
||||
import std.algorithm.comparison;
|
||||
import std.algorithm.mutation : swap;
|
||||
import std.algorithm.searching;
|
||||
import tanya.algorithm.mutation;
|
||||
import tanya.container.entry;
|
||||
|
@ -15,7 +15,6 @@
|
||||
*/
|
||||
module tanya.container.set;
|
||||
|
||||
import std.algorithm.mutation : swap;
|
||||
import tanya.algorithm.mutation;
|
||||
import tanya.container;
|
||||
import tanya.container.entry;
|
||||
|
@ -27,7 +27,7 @@
|
||||
module tanya.container.string;
|
||||
|
||||
import std.algorithm.comparison;
|
||||
import std.algorithm.mutation : bringToFront, copy, swap;
|
||||
import std.algorithm.mutation : bringToFront, copy;
|
||||
import std.algorithm.searching;
|
||||
static import std.range;
|
||||
import tanya.algorithm.mutation;
|
||||
|
@ -15,8 +15,9 @@
|
||||
module tanya.math.mp;
|
||||
|
||||
import std.algorithm.comparison;
|
||||
import std.algorithm.mutation;
|
||||
import std.algorithm.mutation : fill, copy, reverse;
|
||||
import std.range;
|
||||
import tanya.algorithm.mutation;
|
||||
import tanya.container.array;
|
||||
import tanya.encoding.ascii;
|
||||
import tanya.memory;
|
||||
|
@ -24,7 +24,7 @@
|
||||
module tanya.memory.smartref;
|
||||
|
||||
import std.algorithm.comparison;
|
||||
import std.algorithm.mutation;
|
||||
import tanya.algorithm.mutation;
|
||||
import tanya.conv;
|
||||
import tanya.exception;
|
||||
import tanya.memory;
|
||||
|
Loading…
Reference in New Issue
Block a user