std.outbuffer

Сериализует данные в массивы типа ubyte.
Переведена документация к версии 2.075 (раньше не было примера использования модуля). Единственное отличие от модуля в версии 2.072 - в класс OutBuffer добавлен метод clear – прим. пер.
Лицензия:
Boost License 1.0.
Авторы:
Walter Bright

Исходный код std/outbuffer.d

Переместиться к: align2 · align4 · alignSize · clear · fill0 · printf · put · reserve · spread · toBytes · toString · vprintf · write · writef · writefln

class OutBuffer;
OutBuffer предоставляет способ создания массива байтов из необработанных данных. Это полезно для таких вещей, как подготовка массива байтов для записи в файл. Порядок байтов в OutBuffer реализуется в формате, свойственном компьютеру (native). Чтобы управлять порядком байтов (endianness), используйте класс, унаследованный от OutBuffer. Внутренний буфер в OutBuffer выделяется сборщиком мусора. Указатели, хранящиеся в буфере, сканируются сборщиком мусора, но вы должны обеспечить надлежащее выравнивание, например, используя alignSize((void*).sizeof).
Примеры:
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
pure nothrow @safe ubyte[] toBytes();
Преобразует в массив байтов.
pure nothrow @trusted void reserve(size_t nbytes);
Предварительное выделение дополнительных nbytes байтов к размеру внутреннего буфера.
Это оптимизация скорости, хорошее предположение о максимальном размере полученного буфера повысит производительность за счет устранения перераспределений памяти и копирований.
alias put = write;
put позволяет использовать OutBuffer как Выходной диапазон.
pure nothrow @safe void write(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 fill0(size_t nbytes);
Добавляет nbytes нулей во внутренний буфер.
pure nothrow @safe void alignSize(size_t alignsize);
Заполнение нулями для выравнивания до границы степени 2.
pure nothrow @safe void clear();
Очистка данных в буфере
pure nothrow @safe void align2();
Оптимизация распространённого частного случая alignSize(2)
pure nothrow @safe void align4();
Оптимизация распространённого частного случая alignSize(4)
const pure nothrow @safe string toString();
Преобразование внутреннего буфера в массив символов.
nothrow @trusted void vprintf(string format, va_list args);
Добавляет вывод C-функции vprintf() во внутренний буфер.
@trusted void printf(string format, ...);
Добавляет вывод C-функции printf() во внутренний буфер.
void writef(Char, A...)(in Char[] fmt, A args);
Форматирует и записывает свои аргументы в текстовом формате в OutBuffer.
Параметры:
Char[] fmt строка форматирования, как это определено в std.format.formattedWrite
A args форматируемые аргументы
Смотрите также:
Примеры:
OutBuffer b = new OutBuffer();
b.writef("a%sb", 16);
writeln(b.toString()); // "a16b"
void writefln(Char, A...)(in Char[] fmt, A args);
Форматирует и записывает свои аргументы в текстовом формате в OutBuffer, с последующим переводом строки.
Параметры:
Char[] fmt строка форматирования, как это определено в std.format.formattedWrite
A args форматируемые аргументы
Примеры:
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);
Смещение индекса в буфере с созданием пространства размером nbytes, со сдвигом вверх всех данных после index.