mirror of
https://github.com/dlang/phobos.git
synced 2025-05-07 03:27:03 +03:00
41 lines
1 KiB
D
41 lines
1 KiB
D
/**
|
|
* Part of the D programming language runtime library.
|
|
*/
|
|
|
|
/*
|
|
* http://www.digitalmars.com
|
|
* Written by Walter Bright
|
|
* Placed in the Public Domain
|
|
*/
|
|
|
|
module arraycat;
|
|
|
|
import object;
|
|
import std.string;
|
|
import std.c.string;
|
|
|
|
extern (C)
|
|
void[] _d_arraycopy(uint size, void[] from, void[] to)
|
|
{
|
|
//printf("f = %p,%d, t = %p,%d, size = %d\n", from.ptr, from.length, to.ptr, to.length, size);
|
|
|
|
if (to.length != from.length)
|
|
{
|
|
//throw new Error(std.string.format("lengths don't match for array copy, %s = %s", to.length, from.length));
|
|
throw new Error(cast(string) ("lengths don't match for array copy," ~
|
|
toString(to.length) ~ " = "
|
|
~ toString(from.length)));
|
|
}
|
|
else if (to.ptr + to.length * size <= from.ptr ||
|
|
from.ptr + from.length * size <= to.ptr)
|
|
{
|
|
memcpy(to.ptr, from.ptr, to.length * size);
|
|
}
|
|
else
|
|
{
|
|
throw new Error("overlapping array copy");
|
|
//memmove(to.ptr, from.ptr, to.length * size);
|
|
}
|
|
return to;
|
|
}
|
|
|