dxdiff/source/libxdiff/mmblocks.d

41 lines
871 B
D

module libxdiff.mmblocks;
import xdiff;
import libxdiff.init;
import std.exception : enforce;
import core.stdc.errno : errno;
import core.stdc.string : strerror;
import std.string : fromStringz;
import std.conv : to;
private enum DEFAULT_BSIZE = 8 * 1024;
final class MMBlocks : MM
{
public:
this()
{
_inner = initMmfile(DEFAULT_BSIZE);
}
package(libxdiff) mmfile_t* ptr() @trusted
{
return &_inner;
}
const(ubyte)[] asSlice() @trusted
{
enforce(isCompact(), "MMFile must be compact for asSliceConst");
auto h = _inner.head;
return h is null || h.size <= 0 ? [] : (cast(const(ubyte)*) h.ptr)[0 .. h.size.to!size_t];
}
override string toString() const @trusted
{
enforce(isCompact(), "MMFile must be compact for asSliceConst");
auto h = _inner.head;
return h is null || h.size <= 0 ? [] : fromStringz(cast(const char*) h.ptr).idup;
}
}