Best interface for memcpy() (and the string.h family of functions)
Kagamin
spam at here.lot
Thu May 30 08:34:33 UTC 2019
IME partial copy primitives are lacking, so I use this:
/// Copy only as much as possible, return the copied data
T[] CopyHead(T)(T[] dst, in T[] src) pure
{
if(dst.length>=src.length)return CopyAll(dst, src);
CopyOverlap(dst, src[0..dst.length]);
return dst;
}
/// Copy all input data, return the copied data
T[] CopyAll(T)(T[] dst, in T[] src) pure
{
assert(dst.length>=src.length);
dst=dst[0..src.length];
CopyOverlap(dst, src);
return dst;
}
/// Copy overlapping slices
void CopyOverlap(T)(T[] dst, in T[] src) pure
{
import core.stdc.string:memmove;
assert(dst.length==src.length,"same lengths required");
byte[] dstBytes=cast(byte[])dst;
memmove(dstBytes.ptr, src.ptr, dstBytes.length);
}
More information about the Digitalmars-d
mailing list