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_set
Набор неизменяемых уникальных данных, с заранее обозначенным типом значений. Контейнер основан на красно-черном дереве, в связи с чем, обладает всеми преимуществами и недостатками оного.
include/set.h
Интерфейс callback-функции доступа к элементу (далее CallbackT)
-
int callback(const void* value, vtype type, void* data)
value
: указатель на область памяти, в которой располагается значение данных ячейки контейнера, доступ к которой обеспечивается данной функцией. Изменение данных недопустимо и ведет к неопределенному поведению программы.type
: значение типа, заданное константой перечисления vtype, соответствующее типу данных, к которым обеспечивается доступ.data
: произвольные пользовательские данные, которые будут переданны в callback вызывающим методом.
Базовый блок
-
void vset_init(vtype_set* x, vtype type)
- Принимает указатель на область памяти, содержащую инициализируемый контейнер
x
. - Принимает значение типа
type
, определяющий тип содержащихся данных внутри инициализируемого контейнера. - Инициализирует контейнер, оставляя его пустым, позволяя использовать его в дальнейшей логике приложения.
- Принимает указатель на область памяти, содержащую инициализируемый контейнер
Макросы
-
int vset_pop(vtype_set* x, T value, void* data, CallbackT callback)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_set
x
. - Принимает числовое значение, указатель на C-строку или указатель на область памяти, содержащую один из контейнеров, поставляемых вместе с данным проектом.
- Принимает указатель на произвольные пользовательские данные
data
- Принимает указатель на функцию-callback (см. начало текущего документа)
- Вызывает callback-функцию c найденным значением, равным
value
, в качестве аргумента. После чего удаляет найденный объект из контейнера. - Возвращает -1, если значение равное
value
не было найдено внутри контейнера. В противном случае возвращает значение возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_set
-
int vset_get(vtype_set* x, T value, void* data, CallbackT callback)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_set
x
. - Принимает числовое значение, указатель на C-строку или указатель на область памяти, содержащую один из контейнеров, поставляемых вместе с данным проектом.
- Принимает указатель на произвольные пользовательские данные
data
- Принимает указатель на функцию-callback (см. начало текущего документа)
- Вызывает callback-функцию c найденным значением, равным
value
, в качестве аргумента. - Возвращает -1, если значение равное
value
не было найдено внутри контейнера. В противном случае возвращает значение возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_set
-
bool vset_push(vtype_set* x, T value)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_set
x
. - Принимает числовое значение, указатель на C-строку или указатель на область памяти, содержащую один из контейнеров, поставляемых вместе с данным проектом.
- Добавляет полученное значение
value
в последовательность элементов контейнера. В случае, если производится попытка добавить значение, с несравнимым типом относительно типа, которым был инициализирован контейнер, находящийся в области памятиx
(см. 1.1. Система типов), будет вызван системный вызовabort()
. - Возвращает
true
, в случае, если вставка прошла успешно иfalse
если аналогичное значение уже имеется внутри контейнера.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_set
-
int vset_remove(vtype_set* x, T value)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_set
x
. - Принимает числовое значение, указатель на C-строку или указатель на область памяти, содержащую один из контейнеров, поставляемых вместе с данным проектом.
- Возвращает
0
, в случае успешного удаления элемента, или-1
в случае, если значениеvalue
не было найдено.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_set
-
bool in_vset(vtype_set* x, T value)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_set
x
. - Принимает числовое значение, указатель на C-строку или указатель на область памяти, содержащую один из контейнеров, поставляемых вместе с данным проектом.
- Возвращает
true
если значениеvalue
найдено в контейнере, в противном случае, возвращаетfalse
.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_set
include/extra/set.h
Макросы
-
int vset_foreach(vtype_set* x, void* data, CallbackT callback)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_set
x
. - Принимает указатель на произвольные пользовательские данные
data
. - Принимает указатель на функцию-callback (см. начало текущего документа).
- Вызывает callback-функцию последовательно, с каждым элементом контейнера, в качестве аргумента. Если callback возвращает значение отличное от 0, то перебор будет прерван.
- Возвращает 0, в случае успеха, или любое другое значение, возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_set
Дополнительный блок
-
ssize_t libcdsb_vset_insert(vtype_set* x, const void* value, vtype value_type)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_set
x
. - Принимает указатель на передаваемые данные
value
. - Принимает константу идентификатора типа данных
value_type
. - Добавляет полученное значение
value
в последовательность элементов контейнера. В случае, если производится попытка добавить значение, с несравнимым типом относительно типа, которым был инициализирован контейнер, находящийся в области памятиx
(см. 1.1. Система типов), будет вызван системный вызовabort()
. - Возвращает
true
, в случае, если вставка прошла успешно иfalse
если аналогичное значение уже имеется внутри контейнера.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_set
-
int libcdsb_vset_find(vtype_set* x, const void* value, vtype value_type, void* data, CallbackT callback, bool cut)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_set
x
. - Принимает указатель на передаваемые данные
value
. - Принимает константу идентификатора типа данных
value_type
. - Принимает указатель на произвольные пользовательские данные
data
. - Принимает указатель на функцию-callback (см. начало текущего документа).
- Принимает bool значение
cut
, указывающее на необходимость удаление найденного элемента. - Вызывает callback-функцию c найденным значением, равным
value
, в качестве аргумента. - Возвращает -1, если значение равное
value
не было найдено внутри контейнера. В противном случае возвращает значение возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_set
-
int libcdsb_vset_foreach(vtype_set* x, void* data, CallbackT callback, bool flush)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_set
x
. - Принимает указатель на произвольные пользовательские данные
data
. - Принимает указатель на функцию-callback (см. начало текущего документа).
- Принимает bool значение
flush
, указывающее на необходимость очистки контейнера после выполнения перебора. - Вызывает callback-функцию последовательно, с каждым элементом контейнера, в качестве аргумента. Если callback возвращает значение отличное от 0, то перебор будет прерван. Если установлен флаг
flush
, то очистка контейнера произойдет в любом случае, вне зависимости от того, было ли прерывание перебора со стороны пользователя. - Возвращает 0, в случае успеха, или любое другое значение, возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_set