Обрезка и зависимости

Публичный макрос выбораМакрос реализацииПрямые зависимости
XRT_MODULE_XLONL_COREXRT_FEATURE_XLONL_COREcore
XRT_MODULE_XLONL_READXRT_FEATURE_XLONL_READxlonl_core, xlon_read
XRT_MODULE_XLONL_WRITEXRT_FEATURE_XLONL_WRITExlonl_core, xlon_write
XRT_MODULE_XLONL_FILEXRT_FEATURE_XLONL_FILExlonl_read, xlonl_write, file_whole
XRT_MODULE_XLONLXRT_FEATURE_XLONLxlonl_file

Заголовочный файл — <xrt/xlonl.h>, его можно подключить и через зонтичный <xrt.h>. Выбор только чтения или только записи не подключает файловый модуль.

Стабильный контракт

  • По умолчанию пустые строки игнорируются: пустые строки и строки только из ASCII-пробелов, табуляций и CR. Принимаются LF, CRLF и их сочетания; одиночный CR не является разделителем записей. Символы Юникода никогда не превращают строку в пустую.
  • Пустой ввод и ввод из одних пустых строк возвращают пустой Array. Строгий режим пустых строк по-прежнему принимает ввод нулевой длины и один завершающий перевод строки после последней записи; лишние пустые строки — ошибка.
  • Строка должна содержать ровно одно полное значение; последней полной записи разрешено не иметь завершающего перевода строки. Значения на нескольких строках, несколько корневых значений в одной строке, BOM, некорректный UTF-8 и оборванная последняя запись — всё это ошибки.
  • Экранированный перевод строки внутри строки не разделяет записи. Записи-массивы сохраняют вложенность: текст []\n даёт Array с одним пустым массивом.
  • Десериализация передаёт владение Array только после успеха всех записей; при ошибке возвращается C NULL и освобождаются все частичные результаты.
  • Корнем сериализации должен быть XVALUE_ARRAY; null, пустая строка и пустые контейнеры — настоящие записи. Стратегия SKIP не может пропустить всю запись, она действует только внутри одного корневого значения.
  • Вывод компактный, к каждой записи добавляется LF, пустой Array даёт ноль байт. Конфигурация PRETTY отвергается. Конфигурация снимается по значению; изменение исходной конфигурации в обратном вызове не влияет на текущий вызов.
  • Valid повторяет синтаксическую проверку XLON без построения DOM: пустые строки игнорируются, проверяются накопительные бюджеты по умолчанию и встроенные теги, политика повторных ключей DOM не участвует.
  • Файловая запись сначала полностью сериализует в памяти, затем атомарно заменяет файл; при ошибке сериализации цель не изменяется. Синхронный вывод через обратный вызов может успеть зафиксировать часть записей до ошибки; эти байты нельзя откатить.
  • Однострочные комментарии и висячие запятые — расширения совместимости, включаемые только внутри Record; они не могут продолжаться между физическими строками.
  • XLONL поддерживает теги bytes, time, set, intmap и не конечные float, а также явные пользовательские вызовы кодирования; объекты и побочные эффекты, созданные пользовательскими вызовами, лежат на ответственности вызывающего, накопительный бюджет значений считает входные синтаксические значения без обхода созданных вызовами объектов, а накопительный бюджет декодирования считает только встроенные теги bytes.

Потоки и владение: API не содержит неявных блокировок; каждый вызов владеет независимым рабочим пространством, совместный изменяемый ввод синхронизирует вызывающий. Запись выполняется по снимку backing внешнего Array, поэтому во время обратных вызовов действуют правила владения поддеревом Value. Текст ввода и конфигурация заимствуются до возврата вызова; результирующий Array освобождается через xrtValueRelease, результирующая строка — через xrtFree. Выходной обратный вызов потребляет байты до возврата.

Константы

КонстантаЗначениеСмысл
XXLONL_READ_REJECT_EMPTY_LINESUINT32_C(0x00000001)Пустые строки становятся ошибкой; по умолчанию выключено.

Конфигурация обязана быть инициализирована через Init; все бюджеты ненулевые. Значения Record по умолчанию задают существующие функции инициализации XLON. Общий ввод/вывод по умолчанию 64 МиБ; количество записей и синтаксических значений — 1000000. Накопительный бюджет декодирования встроенных тегов bytes по умолчанию 64 МиБ.

xxlonlerrorтип

Ошибки получаются через xrtGetError() с доменом формата xrt.xlonl; ошибки аргументов и нижележащий OOM могут напрямую возвращаться как ошибки Core. Обёртки RECORD/OUTPUT/IO сохраняют Kind причины. Если выделение памяти для самой обёртки не удалось, сохраняется исходная ошибка-причина; данные о позиции не гарантируются.

ЗначениеСмысл
XXLONL_ERROR_CONFIGКонфигурация не инициализирована, ненулевые зарезервированные биты, нулевой бюджет или включён PRETTY.
XXLONL_ERROR_SYNTAXПустая строка в строгом режиме пустых строк.
XXLONL_ERROR_LIMITИсчерпан общий или одиночный бюджет.
XXLONL_ERROR_RECORDОшибка кодирования/декодирования одного значения или добавления его в Array; Cause сохраняет конкретную причину.
XXLONL_ERROR_TYPEКорень сериализации не Array.
XXLONL_ERROR_OUTPUTОшибка синхронного выходного обратного вызова.
XXLONL_ERROR_IOОшибка чтения файла с лимитом или атомарной замены файла.
XXLONL_ERROR_STATEЗарезервированный код ошибки состояния построчной обработки.
typedef enum xxlonlerror { XXLONL_ERROR_CONFIG = 1801, XXLONL_ERROR_SYNTAX, XXLONL_ERROR_LIMIT, XXLONL_ERROR_RECORD, XXLONL_ERROR_TYPE, XXLONL_ERROR_OUTPUT, XXLONL_ERROR_IO, XXLONL_ERROR_STATE } xxlonlerror;

xxlonllocationтип

ПолеТипСмысл
Offsetsize_tСмещение в байтах от нуля в исходном вводе.
Linesize_tОдноразовый физический номер строки, отсчитываемый с единицы по LF; CRLF считается одной строкой, игнорируемые пустые строки тоже считаются.
Columnsize_tНомер байта UTF-8 в текущей физической строке, с единицы; не в символах Юникода.
RecordIndexsize_tИндекс записи с нуля; пустые строки его не увеличивают, ошибка пустой строки указывает на индекс следующей ожидаемой записи.
typedef struct xxlonllocation { size_t Offset; size_t Line; size_t Column; size_t RecordIndex; } xxlonllocation;

xxlonlreadflagтип

ЗначениеСмысл
XXLONL_READ_REJECT_EMPTY_LINESПревращает игнорируемые по умолчанию пустые строки в синтаксические ошибки.
typedef enum xxlonlreadflag { XXLONL_READ_REJECT_EMPTY_LINES = UINT32_C(0x00000001)

xxlonlreadconfigтип

ПолеТипСмысл
RecordxxlonreadconfigКонфигурация одной записи; MaxInputBytes/MaxOutputBytes не включают разделители CRLF/LF, глубина считается от корня каждой записи.
Flagsuint32По умолчанию 0; XXLONL_READ_REJECT_EMPTY_LINES включает ошибки пустых строк.
MaxInputBytessize_tПредел всего исходного ввода, включая игнорируемые пустые строки и все разделители; по умолчанию 64 МиБ.
MaxRecordssize_tПредел числа непустых записей, равен максимальному числу элементов результирующего Array; по умолчанию 1000000.
MaxTotalValuessize_tНакопительный предел синтаксических значений по всем записям, включая отброшенные политикой повторных ключей и исключая синтезируемый Array; по умолчанию 1000000.
MaxTotalDecodedBytessize_tПредел накопительных декодированных байт встроенных тегов bytes, проверяется перед выделением буфера; по умолчанию 64 МиБ.
Reserveduint32[4]Зарезервированное место; должно быть целиком нулевым.
typedef struct xxlonlreadconfig { xxlonreadconfig Record; uint32 Flags; size_t MaxInputBytes; size_t MaxRecords; size_t MaxTotalValues; size_t MaxTotalDecodedBytes; uint32 Reserved[4]; } xxlonlreadconfig;

xxlonlwriteconfigтип

ПолеТипСмысл
RecordxxlonwriteconfigКонфигурация одной записи; MaxInputBytes/MaxOutputBytes не включают разделители CRLF/LF, глубина считается от корня каждой записи.
MaxOutputBytessize_tПредел всех выходных байт, включая каждый LF и исключая завершающий NUL результата; по умолчанию 64 МиБ.
MaxRecordssize_tПредел числа непустых записей, равен максимальному числу элементов результирующего Array; по умолчанию 1000000.
Reserveduint32[4]Зарезервированное место; должно быть целиком нулевым.
typedef struct xxlonlwriteconfig { xxlonwriteconfig Record; size_t MaxOutputBytes; size_t MaxRecords; uint32 Reserved[4]; } xxlonlwriteconfig;
Текст, конфигурация и файловые интерфейсы

xrtXlonlErrorLocationфункция

Читает глобальное байтовое смещение, физические строку/столбец с единицы и индекс записи с нуля; без позиции вывод не изменяется.

bool xrtXlonlErrorLocation(const xerror* pError, xxlonllocation* pLocation)

Параметры

ПараметрНаправлениеОграниченияОписание
pErrorвходдопускается null; заимствование только для чтенияЧитает позицию из ошибки этого формата; возвращает false при отсутствии позиции или чужом домене ошибки.
pLocationвыходне nullПри успехе заполняется глобальной позицией; при ошибке содержимое не изменяется.
Возвращаемое значение
ВозвратСмыслСостояние при ошибке
trueПозиция прочитана.—
falseНет позиции или неверный аргумент.Вывод позиции не изменён; само отсутствие позиции не устанавливает ошибку.
Ошибки
  • XERR_ARGUMENT — выход позиции равен null.

ПримерПроверено компиляцией

xlonl · Вызов xrtXlonlErrorLocation в полной программе; при ошибке переход к единой очистке.

if ( !xrtXlonlErrorLocation(xrtGetError(), &Location) ) goto done;

xrtXlonlReadConfigInitфункция

Инициализирует пропуск пустых строк по умолчанию, строгий синтаксис одной записи и ограниченные накопительные бюджеты.

void xrtXlonlReadConfigInit(xxlonlreadconfig* pConfig)

Параметры

ПараметрНаправлениеОграниченияОписание
pConfigвыходне nullЗадаёт значения по умолчанию и обнуляет зарезервированные поля.
Возвращаемое значение
ВозвратСмыслСостояние при ошибке
voidИнициализация завершена.Нулевой указатель устанавливает ошибку аргумента.
Ошибки
  • XERR_ARGUMENT — выход конфигурации равен null.

ПримерПроверено компиляцией

xlonl · Вызов xrtXlonlReadConfigInit в полной программе; при ошибке переход к единой очистке.

xrtXlonlReadConfigInit(&Read);

xrtXlonlParseфункция

Разбирает последовательность записей с конфигурацией по умолчанию; при успехе возвращает Array во владение, пустой ввод даёт пустой Array.

xvalue* xrtXlonlParse(xstrview Text)

Параметры

ПараметрНаправлениеОграниченияОписание
Textвходявная длина в байтах; NULL Data только при нулевой длинеВесь текст заимствуется до возврата вызова; ввод не обязан завершаться NUL.
Возвращаемое значение
ВозвратСмыслСостояние при ошибке
не nullArray во владение вызывающего.—
NULLОшибка аргументов, бюджета, синтаксиса или ресурсов.Частичный результат не возвращается; ошибка получается через xrtGetError().
Ошибки
  • XERR_ARGUMENT — обязательный указатель равен null, недопустимое поле конфигурации или зарезервированный бит.
  • XERR_MEMORY — не удалось выделить рабочую область, результат или структурную ошибку.
  • XERR_RANGE — исчерпан одиночный или накопительный бюджет.
  • XERR_PROTOCOL — непустая строка не является одним полным корректным значением, либо в строгом режиме встречена пустая строка; ошибка одной записи сохраняет нижележащую цепочку причин.

Прочие ошибки кодирования одной записи наследуют конкретные Kind и код их Cause.

ПримерПроверено компиляцией

xlonl · Вызов xrtXlonlParse в полной программе; при ошибке переход к единой очистке.

pArray = xrtXlonlParse(XRT_STR_LITERAL("{\"id\":1}\n\n[2,3]\r\nnull\n"));
if ( pArray == NULL ) goto done;

xrtXlonlReadфункция

Разбирает все записи по конфигурации; при ошибке освобождает частичные результаты и возвращает NULL. Результат освобождается через xrtValueRelease.

xvalue* xrtXlonlRead(xstrview Text, const xxlonlreadconfig* pConfig)

Параметры

ПараметрНаправлениеОграниченияОписание
Textвходявная длина в байтах; NULL Data только при нулевой длинеВесь текст заимствуется до возврата вызова; ввод не обязан завершаться NUL.
pConfigвходне null; должен быть инициализированКонфигурация одной записи и накопительные бюджеты; источник не изменяется данным вызовом.
Возвращаемое значение
ВозвратСмыслСостояние при ошибке
не nullArray во владение вызывающего.—
NULLОшибка аргументов, бюджета, синтаксиса или ресурсов.Частичный результат не возвращается; ошибка получается через xrtGetError().
Ошибки
  • XERR_ARGUMENT — обязательный указатель равен null, недопустимое поле конфигурации или зарезервированный бит.
  • XERR_MEMORY — не удалось выделить рабочую область, результат или структурную ошибку.
  • XERR_RANGE — исчерпан одиночный или накопительный бюджет.
  • XERR_PROTOCOL — непустая строка не является одним полным корректным значением, либо в строгом режиме встречена пустая строка; ошибка одной записи сохраняет нижележащую цепочку причин.

Прочие ошибки кодирования одной записи наследуют конкретные Kind и код их Cause.

ПримерПроверено компиляцией

xlonl · Вызов xrtXlonlRead в полной программе; при ошибке переход к единой очистке.

pRead = xrtXlonlRead((xstrview){ Text, Size }, &Read);
if ( pRead == NULL ) goto done;

xrtXlonlValidфункция

По умолчанию игнорирует пустые строки и проверяет построчный синтаксис и накопительные бюджеты без построения DOM Value; политика повторных ключей не участвует.

bool xrtXlonlValid(xstrview Text)

Параметры

ПараметрНаправлениеОграниченияОписание
Textвходявная длина в байтах; NULL Data только при нулевой длинеВесь текст заимствуется до возврата вызова; ввод не обязан завершаться NUL.
Возвращаемое значение
ВозвратСмыслСостояние при ошибке
trueВсе непустые строки прошли проверку синтаксиса и бюджетов по умолчанию.—
falseОперация не выполнена.Частичный результат не возвращается; ошибка получается через xrtGetError().
Ошибки
  • XERR_ARGUMENT — обязательный указатель равен null, недопустимое поле конфигурации или зарезервированный бит.
  • XERR_MEMORY — не удалось выделить рабочую область, результат или структурную ошибку.
  • XERR_RANGE — исчерпан одиночный или накопительный бюджет.
  • XERR_PROTOCOL — непустая строка не является одним полным корректным значением, либо в строгом режиме встречена пустая строка; ошибка одной записи сохраняет нижележащую цепочку причин.

Прочие ошибки кодирования одной записи наследуют конкретные Kind и код их Cause.

ПримерПроверено компиляцией

xlonl · Вызов xrtXlonlValid в полной программе; при ошибке переход к единой очистке.

if ( !xrtXlonlValid((xstrview){ Text, Size }) ) goto done;

xrtXlonlWriteConfigInitфункция

Инициализирует компактный построчный вывод, разделение LF и ограниченные накопительные бюджеты; конфигурация PRETTY недопустима.

void xrtXlonlWriteConfigInit(xxlonlwriteconfig* pConfig)

Параметры

ПараметрНаправлениеОграниченияОписание
pConfigвыходне nullЗадаёт значения по умолчанию и обнуляет зарезервированные поля.
Возвращаемое значение
ВозвратСмыслСостояние при ошибке
voidИнициализация завершена.Нулевой указатель устанавливает ошибку аргумента.
Ошибки
  • XERR_ARGUMENT — выход конфигурации равен null.

ПримерПроверено компиляцией

xlonl · Вызов xrtXlonlWriteConfigInit в полной программе; при ошибке переход к единой очистке.

xrtXlonlWriteConfigInit(&Write);

xrtXlonlStringifyфункция

Записывает каждый элемент Array одной строкой; возвращает завершённый NUL текст, освобождаемый через xrtFree. При ошибке необязательный pSize не изменяется.

str xrtXlonlStringify(const xvalue* pArray, size_t* pSize)

Параметры

ПараметрНаправлениеОграниченияОписание
pArrayвходне null и имеет тип XVALUE_ARRAYСериализуемые элементы; вызов не потребляет владеющую ссылку вызывающего.
pSizeвыходдопускается nullПри успехе принимает число байт, включая LF и исключая NUL; при ошибке не изменяется.
Возвращаемое значение
ВозвратСмыслСостояние при ошибке
не nullЗавершённый NUL текст во владение; пустой вывод всё равно возвращает освобождаемую строку.—
NULLОшибка конфигурации, типа, кодирования или ресурсов.pSize не изменён; ошибка получается через xrtGetError().
Ошибки
  • XERR_ARGUMENT — обязательный указатель равен null, недопустимое поле конфигурации или зарезервированный бит.
  • XERR_MEMORY — не удалось выделить рабочую область, результат или структурную ошибку.
  • XERR_RANGE — исчерпан одиночный или накопительный бюджет.
  • XERR_TYPE — корень сериализации не Array.
  • XERR_UNSUPPORTED — одно значение не кодируется выбранным форматом.

Прочие ошибки кодирования одной записи наследуют конкретные Kind и код их Cause.

ПримерПроверено компиляцией

xlonl · Вызов xrtXlonlStringify в полной программе; при ошибке переход к единой очистке.

Text = xrtXlonlStringify(pArray, &Size);
if ( Text == NULL ) goto done;

xrtXlonlWriteфункция

Выводит каждую запись и её LF в синхронный обратный вызов по кускам; заимствованные байты действительны только во время вызова, зафиксированные до ошибки байты откатить нельзя.

bool xrtXlonlWrite(const xvalue* pArray, const xxlonlwriteconfig* pConfig, xxlonwriteproc pWrite, ptr pUserData)

Параметры

ПараметрНаправлениеОграниченияОписание
pArrayвходне null и имеет тип XVALUE_ARRAYСериализуемые элементы; вызов не потребляет владеющую ссылку вызывающего.
pConfigвходне null; должен быть инициализированКонфигурация одной записи и накопительные бюджеты; источник не изменяется данным вызовом.
pWriteвходненулевой синхронный обратный вызовПотребляет заимствованные байты кусками; возврат false прерывает вывод.
pUserDataвходдопускается nullКак есть передаётся синхронному выходному обратному вызову.
Возвращаемое значение
ВозвратСмыслСостояние при ошибке
trueВесь вывод завершён.—
falseОперация не выполнена.Ссылки ввода остаются у вызывающего; зафиксированные байты откатить нельзя, ошибка получается через xrtGetError().
Ошибки
  • XERR_ARGUMENT — обязательный указатель равен null, недопустимое поле конфигурации или зарезервированный бит.
  • XERR_MEMORY — не удалось выделить рабочую область, результат или структурную ошибку.
  • XERR_RANGE — исчерпан одиночный или накопительный бюджет.
  • XERR_TYPE — корень сериализации не Array.
  • XERR_UNSUPPORTED — одно значение не кодируется выбранным форматом.
  • XERR_IO — файловая операция либо сбой выходного обратного вызова без конкретной ошибки; прочие Kind нижележащей причины сохраняются как есть.

Прочие ошибки кодирования одной записи наследуют конкретные Kind и код их Cause.

ПримерПроверено компиляцией

xlonl · Вызов xrtXlonlWrite в полной программе; при ошибке переход к единой очистке.

if ( !xrtXlonlWrite(pArray, &Write, discard, NULL) ) goto done;

xrtXlonlParseFileфункция

Читает файл с лимитом по умолчанию и возвращает Array во владение.

xvalue* xrtXlonlParseFile(cstr sPath)

Параметры

ПараметрНаправлениеОграниченияОписание
sPathвходненулевой путь, завершённый NULЧитаемый файл либо целевой файл атомарной замены.
Возвращаемое значение
ВозвратСмыслСостояние при ошибке
не nullArray во владение вызывающего.—
NULLОшибка аргументов, бюджета, синтаксиса или ресурсов.Частичный результат не возвращается; ошибка получается через xrtGetError().
Ошибки
  • XERR_ARGUMENT — обязательный указатель равен null, недопустимое поле конфигурации или зарезервированный бит.
  • XERR_MEMORY — не удалось выделить рабочую область, результат или структурную ошибку.
  • XERR_RANGE — исчерпан одиночный или накопительный бюджет.
  • XERR_PROTOCOL — непустая строка не является одним полным корректным значением, либо в строгом режиме встречена пустая строка; ошибка одной записи сохраняет нижележащую цепочку причин.
  • XERR_IO — файловая операция либо сбой выходного обратного вызова без конкретной ошибки; прочие Kind нижележащей причины сохраняются как есть.

Прочие ошибки кодирования одной записи наследуют конкретные Kind и код их Cause.

ПримерПроверено компиляцией

xlonl · Вызов xrtXlonlParseFile в полной программе; при ошибке переход к единой очистке.

pRead = xrtXlonlParseFile(Path);
if ( pRead == NULL ) goto done;

xrtXlonlReadFileфункция

Читает файл с общим лимитом ввода и разбирает построчно; при ошибке частичный Array не возвращается.

xvalue* xrtXlonlReadFile(cstr sPath, const xxlonlreadconfig* pConfig)

Параметры

ПараметрНаправлениеОграниченияОписание
sPathвходненулевой путь, завершённый NULЧитаемый файл либо целевой файл атомарной замены.
pConfigвходне null; должен быть инициализированКонфигурация одной записи и накопительные бюджеты; источник не изменяется данным вызовом.
Возвращаемое значение
ВозвратСмыслСостояние при ошибке
не nullArray во владение вызывающего.—
NULLОшибка аргументов, бюджета, синтаксиса или ресурсов.Частичный результат не возвращается; ошибка получается через xrtGetError().
Ошибки
  • XERR_ARGUMENT — обязательный указатель равен null, недопустимое поле конфигурации или зарезервированный бит.
  • XERR_MEMORY — не удалось выделить рабочую область, результат или структурную ошибку.
  • XERR_RANGE — исчерпан одиночный или накопительный бюджет.
  • XERR_PROTOCOL — непустая строка не является одним полным корректным значением, либо в строгом режиме встречена пустая строка; ошибка одной записи сохраняет нижележащую цепочку причин.
  • XERR_IO — файловая операция либо сбой выходного обратного вызова без конкретной ошибки; прочие Kind нижележащей причины сохраняются как есть.

Прочие ошибки кодирования одной записи наследуют конкретные Kind и код их Cause.

ПримерПроверено компиляцией

xlonl · Вызов xrtXlonlReadFile в полной программе; при ошибке переход к единой очистке.

pRead = xrtXlonlReadFile(Path, &Read);
if ( pRead == NULL ) goto done;

xrtXlonlStringifyFileфункция

Полностью сериализует Array с конфигурацией по умолчанию, затем атомарно заменяет файл.

bool xrtXlonlStringifyFile(cstr sPath, const xvalue* pArray)

Параметры

ПараметрНаправлениеОграниченияОписание
sPathвходненулевой путь, завершённый NULЧитаемый файл либо целевой файл атомарной замены.
pArrayвходне null и имеет тип XVALUE_ARRAYСериализуемые элементы; вызов не потребляет владеющую ссылку вызывающего.
Возвращаемое значение
ВозвратСмыслСостояние при ошибке
trueВесь вывод завершён.—
falseОперация не выполнена.Частичный результат не возвращается; ошибка получается через xrtGetError().
Ошибки
  • XERR_ARGUMENT — обязательный указатель равен null, недопустимое поле конфигурации или зарезервированный бит.
  • XERR_MEMORY — не удалось выделить рабочую область, результат или структурную ошибку.
  • XERR_RANGE — исчерпан одиночный или накопительный бюджет.
  • XERR_TYPE — корень сериализации не Array.
  • XERR_UNSUPPORTED — одно значение не кодируется выбранным форматом.
  • XERR_IO — файловая операция либо сбой выходного обратного вызова без конкретной ошибки; прочие Kind нижележащей причины сохраняются как есть.

Прочие ошибки кодирования одной записи наследуют конкретные Kind и код их Cause.

ПримерПроверено компиляцией

xlonl · Вызов xrtXlonlStringifyFile в полной программе; при ошибке переход к единой очистке.

if ( !xrtXlonlStringifyFile(Path, pArray) ) goto done;

xrtXlonlWriteFileфункция

Полностью сериализует с расширенной конфигурацией, затем атомарно заменяет файл; при ошибке сериализации исходный файл сохраняется.

bool xrtXlonlWriteFile(cstr sPath, const xvalue* pArray, const xxlonlwriteconfig* pConfig)

Параметры

ПараметрНаправлениеОграниченияОписание
sPathвходненулевой путь, завершённый NULЧитаемый файл либо целевой файл атомарной замены.
pArrayвходне null и имеет тип XVALUE_ARRAYСериализуемые элементы; вызов не потребляет владеющую ссылку вызывающего.
pConfigвходне null; должен быть инициализированКонфигурация одной записи и накопительные бюджеты; источник не изменяется данным вызовом.
Возвращаемое значение
ВозвратСмыслСостояние при ошибке
trueВесь вывод завершён.—
falseОперация не выполнена.Частичный результат не возвращается; ошибка получается через xrtGetError().
Ошибки
  • XERR_ARGUMENT — обязательный указатель равен null, недопустимое поле конфигурации или зарезервированный бит.
  • XERR_MEMORY — не удалось выделить рабочую область, результат или структурную ошибку.
  • XERR_RANGE — исчерпан одиночный или накопительный бюджет.
  • XERR_TYPE — корень сериализации не Array.
  • XERR_UNSUPPORTED — одно значение не кодируется выбранным форматом.
  • XERR_IO — файловая операция либо сбой выходного обратного вызова без конкретной ошибки; прочие Kind нижележащей причины сохраняются как есть.

Прочие ошибки кодирования одной записи наследуют конкретные Kind и код их Cause.

ПримерПроверено компиляцией

xlonl · Вызов xrtXlonlWriteFile в полной программе; при ошибке переход к единой очистке.

if ( !xrtXlonlWriteFile(Path, pArray, &Write) ) goto done;

Индекс константконстанта

Следующие константы определены в заголовочном файле этой страницы; их смысл — в комментариях публичного заголовка.

КонстантаОписание
XXLONL_ERROR_CONFIGСм. комментарии в заголовке
XXLONL_ERROR_IOСм. комментарии в заголовке
XXLONL_ERROR_LIMITСм. комментарии в заголовке
XXLONL_ERROR_OUTPUTСм. комментарии в заголовке
XXLONL_ERROR_RECORDСм. комментарии в заголовке
XXLONL_ERROR_STATEСм. комментарии в заголовке
XXLONL_ERROR_SYNTAXСм. комментарии в заголовке
XXLONL_ERROR_TYPEСм. комментарии в заголовке
XXLONL_READ_REJECT_EMPTY_LINESСм. комментарии в заголовке