英語版
このページの英語版を見る

std.outbuffer

ubyte 配列にデータをシリアライズする。
Authors:

ソース std/outbuffer.d

class OutBuffer;
OutBufferは、生データからバイト配列を構築する方法を提供する。 を構築する方法を提供する。これは、ファイルに書き出すバイト配列を準備するときなどに便利である。 ファイルに書き出すためのバイト配列を準備するような場合に便利である。 OutBufferのバイト順序は、コンピュータのネイティブ・フォーマットである。 バイト順序(エンディアン)を制御するには、OutBufferから派生したクラスを使用する。 を使用する。 OutBufferの内部バッファはGCで割り当てられる。ポインター バッファに格納されたポインターはGCによってスキャンされるが、適切なアラインメントを確保しなければならない。 alignSize((void*).sizeof)を使うなどして、適切なアライメントを確保しなければならない。
Examples:
import std.string : cmp;

OutBuffer buf = new OutBuffer();

writeln(buf.offset); // 0
buf.write("hello");
buf.write(cast(byte) 0x20);
buf.write("world");
buf.printf(" %d", 62665);
writeln(cmp(buf.toString(), "hello world 62665")); // 0

buf.clear();
writeln(cmp(buf.toString(), "")); // 0
buf.write("New data");
writeln(cmp(buf.toString(), "New data")); // 0
inout pure nothrow scope @safe inout(ubyte)[] toBytes();
バイト配列に変換する。
pure nothrow @trusted void reserve(size_t nbytes);
内部バッファのサイズよりnバイト多く事前確保する。
これは これは速度の最適化である。 バッファの最大サイズを適切に推測することで、再割り当てやコピーを排除し、パフォーマンスを向上させる。
alias put = write;
putは、OutBufferをOutputRangeとして使用できるようにする。
pure nothrow @safe void write(scope const(ubyte)[] bytes);

pure nothrow @safe void write(byte b);

pure nothrow @safe void write(char c);

pure nothrow @safe void write(dchar c);

pure nothrow @safe void write(short s);

pure nothrow @safe void write(int i);

pure nothrow @safe void write(long l);
内部バッファにデータを追加する。
pure nothrow @safe void fill(size_t nbytes, ubyte val = 0);
nバイトのvalを内部バッファに追加する。
Parameters:
size_t nbytes 埋めるバイト数。
ubyte val デフォルトは0である。
pure nothrow @safe void fill0(size_t nbytes);
nバイトの0を内部バッファに追加する。

パラメータ nbytes - fillするバイト数。

pure nothrow @safe void alignSize(size_t alignsize, ubyte val = 0);
バッファが2のべき乗境界に整列するまでバイトを追加する。
デフォルトでは0バイトで埋める。
Parameters:
size_t alignsize アライメント値。2のべき乗でなければならない。
ubyte val デフォルトは0である。
Examples:
OutBuffer buf = new OutBuffer();
buf.write(cast(ubyte) 1);
buf.align2();
writeln(buf.toBytes()); // "\x01\x00"
buf.write(cast(ubyte) 2);
buf.align4();
writeln(buf.toBytes()); // "\x01\x00\x02\x00"
buf.write(cast(ubyte) 3);
buf.alignSize(8);
writeln(buf.toBytes()); // "\x01\x00\x02\x00\x03\x00\x00\x00"
Examples:
同上
OutBuffer buf = new OutBuffer();
buf.write(cast(ubyte) 1);
buf.align2(0x55);
writeln(buf.toBytes()); // "\x01\x55"
buf.write(cast(ubyte) 2);
buf.align4(0x55);
writeln(buf.toBytes()); // "\x01\x55\x02\x55"
buf.write(cast(ubyte) 3);
buf.alignSize(8, 0x55);
writeln(buf.toBytes()); // "\x01\x55\x02\x55\x03\x55\x55\x55"
pure nothrow @safe void clear();
バッファ内のデータをクリアする
pure nothrow @safe void align2(ubyte val = 0);
一般的な特殊ケースを最適化する alignSize(2)
Parameters:
ubyte val デフォルトは0である。
pure nothrow @safe void align4(ubyte val = 0);
一般的な特殊ケースを最適化する alignSize(4)
Parameters:
ubyte val デフォルトは 0 である。
const pure nothrow @safe string toString();
内部バッファを文字の配列に変換。
nothrow @trusted void vprintf(scope string format, va_list args);
C の vprintf() の出力を内部バッファに追加する。
@trusted void printf(scope string format, ...);
C の printf() の出力を内部バッファに追加する。
void writef(Char, A...)(scope const(Char)[] fmt, A args);

void writef(alias fmt, A...)(A args)
if (isSomeString!(typeof(fmt)));
引数をテキスト形式で整形し、OutBuffer に書き込む。
Parameters:
const(Char)[] fmt で説明されているように、文字列をフォーマットする。 std.format.formattedWrite
A args フォーマットされる引数
Examples:
OutBuffer b = new OutBuffer();
b.writef("a%sb", 16);
writeln(b.toString()); // "a16b"
Examples:
OutBuffer b = new OutBuffer();
b.writef!"a%sb"(16);
writeln(b.toString()); // "a16b"
void writefln(Char, A...)(scope const(Char)[] fmt, A args);

void writefln(alias fmt, A...)(A args)
if (isSomeString!(typeof(fmt)));
引数をテキスト形式で整形し、OutBufferに書き込む、 その後に改行が続く。
Parameters:
const(Char)[] fmt フォーマット文字列は std.format.formattedWrite
A args フォーマットされる引数
Examples:
OutBuffer b = new OutBuffer();
b.writefln("a%sb", 16);
writeln(b.toString()); // "a16b\n"
Examples:
OutBuffer b = new OutBuffer();
b.writefln!"a%sb"(16);
writeln(b.toString()); // "a16b\n"
pure nothrow @safe void spread(size_t index, size_t nbytes);
バッファのオフセット・インデックスで、nバイトのスペースを作成する。 すべてのデータをインデックスより上にシフトする。