Модуль tuple
Формат кортежа.
С каждым кортежем связан формат (класс). Формат по умолчанию используется для создания кортежей, не привязанных к какому-либо конкретному спейсу.
Кортеж
Выделить память и инициализировать новый кортеж из сырых данных MsgPack Array.
Параметры:
format(box_tuple_format_t*) — формат кортежа. Чтобы создать кортеж, не зависящий от спейса, используйте box_tuple_format_default().tuple(const char*) — данные кортежа в формате MsgPack Array ([field1, field2, ...])tuple_end(const char*) — конецdata
Возвращает
NULL при нехватке памяти
Возвращает
кортеж в противном случае
См. также: box.tuple.new()
Увеличить счётчик ссылок кортежа.
Для кортежей ведётся подсчёт ссылок. Все функции, возвращающие кортежи, гарантируют, что для последнего возвращённого кортежа счётчик ссылок увеличивается внутренними средствами до следующего вызова функции API, которая передаёт управление или возвращает другой кортеж.
Перед тем как забрать кортежи для длительной обработки в своём коде, следует увеличить счётчик ссылок. Сборщик мусора Lua не уничтожит кортеж, на который есть ссылки, даже если другой файбер удалит их из спейса. После обработки следует уменьшить счётчик ссылок с помощью box_tuple_unref(), иначе произойдёт утечка кортежа.
Параметры:
tuple(box_tuple_t*) — кортеж
Возвращает
-1 при ошибке
0 в противном случае
См. также: box_tuple_unref()
Уменьшить счётчик ссылок кортежа.
Параметры:
tuple(box_tuple_t*) — кортеж
См. также: box_tuple_ref()
Вернуть количество полей в кортеже (размер MsgPack Array).
Параметры:
tuple(box_tuple_t*) — кортеж
Вернуть количество байт, используемых для хранения внутренних данных кортежа (MsgPack Array).
Параметры:
tuple(box_tuple_t*) — кортеж
Выгрузить сырые данные MsgPack в буфер памяти buf размером size.
Сохранить поля кортежа в буфере памяти.
В случае успешного завершения функция возвращает количество записанных байт. Если размера буфера недостаточно, возвращаемое значение равно количеству байт, которое было бы записано при наличии достаточного места.
Возвращает
-1 при ошибке
Возвращает
количество записанных байт в случае успеха.
Вернуть связанный формат.
Параметры:
tuple(box_tuple_t*) — кортеж
Возвращает
формат кортежа
Вернуть сырое поле кортежа в формате MsgPack. Результат — указатель на сырые данные MessagePack, которые можно декодировать функциями mp_decode; пример см. в обучающей программе read.c.
Буфер действителен до следующего вызова функции box_tuple_*.
Параметры:
tuple(box_tuple_t*) — кортежfield_id(uint32_t) — отсчитываемый с нуля индекс в массиве MsgPack.
Возвращает
NULL, если i >= box_tuple_field_count()
Возвращает
msgpack в противном случае
Возможные типы данных для полей кортежа.
Использовать макросы STRS/ENUM для типов нельзя, поскольку имя перечисления (STRING) не совпадает с литералом имени типа ("STR"). STR уже используется в качестве типа в Objective C.
Определение ключа
Создать определение ключа с ключевыми полями переданных типов на переданных позициях.
Может использоваться для создания формата кортежа и/или сравнения кортежей.
Параметры:
fields(uint32_t*) — массив с идентификаторами ключевых полейtypes(uint32_t) — массив с типами ключевых полейpart_count(uint32_t) — количество ключевых полей
Возвращает
определение ключа в случае успеха
Возвращает
NULL при ошибке
Удалить определение ключа
Параметры:
key_def(box_key_def_t*) — определение ключа, которое требуется удалить
Вернуть новый формат кортежа в памяти на основе переданных определений ключа
Параметры:
keys(key_def) — массив ключей, определённых для форматаkey_count(uint16_t) — количество ключей
Возвращает
новый формат кортежа в случае успеха
Возвращает
NULL при ошибке
Увеличить счётчик ссылок формата кортежа
Параметры:
tuple_format(box_tuple_format_t) — формат кортежа, для которого увеличивается счётчик ссылок
Уменьшить счётчик ссылок формата кортежа
Параметры:
tuple_format(box_tuple_format_t) — формат кортежа, для которого уменьшается счётчик ссылок
int box_tuple_compare(const box_tuple_t *tuple_a, const box_tuple_t *tuple_b, const box_key_def_t *key_def)
Сравнить кортежи с использованием определения ключа
Параметры:
tuple_a(const box_tuple_t*) — первый кортежtuple_b(const box_tuple_t*) — второй кортежkey_def(const box_key_def_t*) — определение ключа
Возвращает
0, если key_fields(tuple_a) == key_fields(tuple_b)
Возвращает
<0, если key_fields(tuple_a) < key_fields(tuple_b)
Возвращает
0, если
key_fields(tuple_a)>key_fields(tuple_b)
См. также: enum field_type
int box_tuple_compare_with_key(const box_tuple_t *tuple, const char *key, const box_key_def_t *key_def);
Сравнить кортеж с ключом с использованием определения ключа
Параметры:
tuple(const box_tuple_t*) — кортежkey(const char*) — ключ с заголовком массива MessagePackkey_def(const box_key_def_t*) — определение ключа
Возвращает
0, если key_fields(tuple) == parts(key)
Возвращает
<0, если key_fields(tuple) < parts(key)
Возвращает
0, если
key_fields(tuple)>parts(key)
См. также: enum field_type
Итератор кортежа
Выделить память и инициализировать новый итератор кортежа. Итератор кортежа позволяет перебирать поля на корневом уровне массива MsgPack.
Пример:
box_tuple_iterator_t* it = box_tuple_iterator(tuple);if (it == NULL) {// error handling using box_error_last()}const char* field;while (field = box_tuple_next(it)) {// process raw MsgPack data}// rewind the iterator to the first positionbox_tuple_rewind(it)assert(box_tuple_position(it) == 0);// rewind three fieldsfield = box_tuple_seek(it, 3);assert(box_tuple_position(it) == 4);box_iterator_free(it);
Уничтожить итератор кортежа и освободить занимаемую им память
Вернуть отсчитываемую с нуля следующую позицию в итераторе. То есть эта функция возвращает идентификатор поля, которое будет возвращено следующим вызовом box_tuple_next(). Возвращаемое значение равно нулю после инициализации или перемотки и box_tuple_field_count() после окончания итерации.
Параметры:
it(box_tuple_iterator_t*) — итератор кортежа
Возвращает
позиция
Перемотать итератор в начальную позицию.
Параметры:
it(box_tuple_iterator_t*) — итератор кортежа
После: box_tuple_position(it) == 0
Переместить итератор кортежа.
Результат — указатель на сырые данные MessagePack, которые можно
декодировать функциями mp_decode; пример см. в обучающей программе
read.c. Возвращаемый буфер действителен до
следующего вызова API box_tuple_*. Запрошенное field_no
возвращается следующим вызовом box_tuple_next(it).
Параметры:
it(box_tuple_iterator_t*) — итератор кортежаfield_no(uint32_t) — номер поля — отсчитываемая с нуля позиция в массиве MsgPack
После:
box_tuple_position(it) == field_not, если возвращаемое значение не NULL.box_tuple_position(it) == box_tuple_field_count(tuple), если возвращаемое значение равно NULL.
Вернуть следующее поле кортежа из итератора кортежа.
Результат — указатель на сырые данные MessagePack, которые можно декодировать функциями mp_decode; пример см. в обучающей программе
read.c. Возвращаемый буфер действителен до следующего вызова API box_tuple_*.
Параметры:
it(box_tuple_iterator_t*) — итератор кортежа
Возвращает
NULL, если полей больше нет
Возвращает
MsgPack в противном случае
До: box_tuple_position() — это отсчитываемый с нуля идентификатор возвращаемого поля.
После: box_tuple_position(it) == box_tuple_field_count(tuple), если возвращаемое значение равно NULL.