This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
vtype_map
Набор пар ключ-значение с неизменяемыми уникальными ключами. Тип содержащихся ключей должен быть определен при инициализации контейнера, данные могут иметь произвольный тип. Контейнер основан на красно-черном дереве (с поиском по ключу), в связи с чем, обладает всеми преимуществами и недостатками оного.
include/map.h
Интерфейс callback-функции доступа к элементу (далее CallbackT)
-
int callback(const void* key, vtype key_type, void* value, vtype value_type, void* data)
key
: указатель на область памяти, в которой располагается значение ключа ячейки контейнера, доступ к которой обеспечивается данной функцией. Изменение ключа недопустимо и ведет к неопределенному поведению программы.key_type
: значение типа ключа, заданное константой перечисления vtype, соответствующее типу данных, к которым обеспечивается доступ.value
: указатель на область памяти, в которой располагается значение данных ячейки контейнера, доступ к которой обеспечивается данной функцией.value_type
: значение типа данных, заданное константой перечисления vtype, соответствующее типу данных, к которым обеспечивается доступ.data
: произвольные пользовательские данные, которые будут переданны в callback вызывающим методом.
Базовый блок
-
void map_init(vtype_map* x, vtype key_type)
- Принимает указатель на область памяти, содержащую инициализируемый контейнер
x
. - Принимает значение типа
key_type
, определяющий тип содержащихся ключей внутри инициализируемого контейнера. - Инициализирует контейнер, оставляя его пустым, позволяя использовать его в дальнейшей логике приложения.
- Принимает указатель на область памяти, содержащую инициализируемый контейнер
Макросы
-
int map_pop(vtype_map* x, T key, void* data, CallbackT callback)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_map
x
. - Принимает числовое значение, указатель на C-строку или указатель на область памяти, содержащую один из контейнеров, поставляемых вместе с данным проектом.
- Принимает указатель на произвольные пользовательские данные
data
- Принимает указатель на функцию-callback (см. начало текущего документа)
- Вызывает callback-функцию cо значением найденной ячейки, ключ которой равен
key
, в качестве аргумента. После чего удаляет найденный объект из контейнера. - Возвращает -1, если ячейка со значением ключа, равным
key
, не была найдена внутри контейнера. В противном случае возвращает значение возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_map
-
int map_get(vtype_map* x, T key, void* data, CallbackT callback)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_map
x
. - Принимает числовое значение, указатель на C-строку или указатель на область памяти, содержащую один из контейнеров, поставляемых вместе с данным проектом.
- Принимает указатель на произвольные пользовательские данные
data
- Принимает указатель на функцию-callback (см. начало текущего документа)
- Вызывает callback-функцию cо значением найденной ячейки, ключ которой равен
key
, в качестве аргумента. - Возвращает -1, если ячейка со значением ключа, равным
key
, не была найдена внутри контейнера. В противном случае возвращает значение возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_map
-
bool map_update(vtype_map* x, T key)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_map
x
. - Принимает числовое значение, указатель на C-строку или указатель на область памяти, содержащую один из контейнеров, поставляемых вместе с данным проектом.
- Добавляет полученное значение
key
в последовательность элементов контейнера. В случае, если производится попытка добавить значение, с несравнимым типом относительно типа, которым был инициализирован контейнер, находящийся в области памятиx
(см. 1.1. Система типов), будет вызван системный вызовabort()
. - Возвращает
true
, в случае, если вставка прошла успешно иfalse
если аналогичное значение уже имеется внутри контейнера.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_map
-
int map_remove(vtype_map* x, T key)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_map
x
. - Принимает числовое значение, указатель на C-строку или указатель на область памяти, содержащую один из контейнеров, поставляемых вместе с данным проектом.
- Возвращает
0
, в случае успешного удаления элемента, или-1
в случае, если значениеkey
не было найдено.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_map
-
bool in_map(vtype_map* x, T key)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_map
x
. - Принимает числовое значение, указатель на C-строку или указатель на область памяти, содержащую один из контейнеров, поставляемых вместе с данным проектом.
- Возвращает
true
если значениеkey
найдено в контейнере, в противном случае, возвращаетfalse
.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_map
include/extra/map.h
Макросы
-
int map_foreach(vtype_map* x, void* data, CallbackT callback)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_map
x
. - Принимает указатель на произвольные пользовательские данные
data
. - Принимает указатель на функцию-callback (см. начало текущего документа).
- Вызывает callback-функцию последовательно, с каждым элементом контейнера, в качестве аргумента. Если callback возвращает значение отличное от 0, то перебор будет прерван.
- Возвращает 0, в случае успеха, или любое другое значение, возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_map
-
vtype_set map_copy_keys(const vtype_map* s)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_map
s
. - Возвращает глубокую копию полного набора ключей, использованных внутри контейнера
s
.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_map
-
vtype_set* map_duplicate_keys(const vtype_map* s)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_map
s
. - Возвращает выделенный блок памяти, содержащий глубокую копию полного набора ключей, использованных внутри контейнера
s
.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_map
-
void map_copy_init_keys(vtype_set* x, const vtype_map* s)
- Принимает указатель на область памяти, содержащую инициализируемый контейнер
x
. - Принимает указатель на область памяти, содержащую инициализированное значение vtype_map
s
. - Инициализирует область памяти
x
глубокой копией полного набора ключей, использованных внутри контейнераs
.
- Принимает указатель на область памяти, содержащую инициализируемый контейнер
Дополнительный блок
-
ssize_t libcdsb_map_update(vtype_map* x, const void* key, vtype key_type, const void* value, vtype value_type)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_set
x
. - Принимает указатель на передаваемый ключ
key
. - Принимает константу идентификатора типа ключа
key_type
. - Принимает указатель на передаваемые данные
value
. - Принимает константу идентификатора типа данных
value_type
. - Обновляет значение ячейки с ключом равным
key
внутри контейнера и присваивает данным значение равноеvalue
. В случае, если ячейки с ключом равнымkey
в контейнере не существует, она будет создана. Если производится попытка добавить значение, с несравнимым типом ключа относительно типа, которым был инициализирован контейнер, находящийся в области памятиx
(см. 1.1. Система типов), будет вызван системный вызовabort()
. - Возвращает
true
, в случае, если была произвена замена существующей ячейки иfalse
если была произведена вставка новой ячейки.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_set
-
int libcdsb_map_find(vtype_map* x, const void* key, vtype key_type, void* data, CallbackT callback, bool cut)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_map
x
. - Принимает указатель на передаваемые данные
key
. - Принимает константу идентификатора типа данных
key_type
. - Принимает указатель на произвольные пользовательские данные
data
. - Принимает указатель на функцию-callback (см. начало текущего документа).
- Принимает bool значение
cut
, указывающее на необходимость удаление найденного элемента. - Вызывает callback-функцию cо значением найденной ячейки, ключ которой равен
key
, в качестве аргумента. - Возвращает -1, если ячейка со значением ключа, равным
key
, не была найдена внутри контейнера. В противном случае возвращает значение возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_map
-
int libcdsb_map_foreach(vtype_map* x, void* data, CallbackT callback, bool flush)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_map
x
. - Принимает указатель на произвольные пользовательские данные
data
. - Принимает указатель на функцию-callback (см. начало текущего документа).
- Принимает bool значение
flush
, указывающее на необходимость очистки контейнера после выполнения перебора. - Вызывает callback-функцию последовательно, с каждым элементом контейнера, в качестве аргумента. Если callback возвращает значение отличное от 0, то перебор будет прерван. Если установлен флаг
flush
, то очистка контейнера произойдет в любом случае, вне зависимости от того, было ли прерывание перебора со стороны пользователя. - Возвращает 0, в случае успеха, или любое другое значение, возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_map