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_list
Двунаправленный связанный список, позволяющий размещать внутри себя значения с произвольным типом.
include/list.h
Интерфейс callback-функции доступа к элементу (далее CallbackT)
-
int callback(void* value, ssize_t index, vtype type, void* data)
value
: указатель на область памяти, в которой располагается значение данных ячейки контейнера, доступ к которой обеспечивается данной функцией.index
: индекс элемента, к которому обеспечивается доступ, в рамках контейнера.type
: значение типа, заданное константой перечисления vtype, соответствующее типу данных, к которым обеспечивается доступ.data
: произвольные пользовательские данные, которые будут переданны в callback вызывающим методом.
Базовый блок
-
void list_init(vtype_list* x)
- Принимает указатель на область памяти, содержащую инициализируемый контейнер
x
. - Инициализирует контейнер, оставляя его пустым, позволяя использовать его в дальнейшей логике приложения.
- Принимает указатель на область памяти, содержащую инициализируемый контейнер
-
void list_extend(vtype_list* x, const vtype_list* s)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
x
. - Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
s
. - Производит глубокое копирование всех элементов
s
в конец контейнераx
.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
-
size_t list_slice(vtype_list* x, vtype_array* src, ssize_t index, size_t count, bool cut)
- Принимает указатель на область памяти, содержащую инициализируемый контейнер
x
. - Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
src
. - Принимает значение индекса данных
index
, начиная с которого, требуется начать "срез" данных. Отрицательные значения индекса указывают на элементы, начианая с последнего (где индекс -1 указывает на последний элемент контейнера). Если отрицательное значение индекса по модулю превышает размерность контейнера, то будет считаться, что запрос сделан с индексом равным нулю. - Принимает значение количества элементов
count
, которым необходимо инициализироватьx
в рамках "среза" данныхsrc
, начиная сindex
. В случае, если количество элементов, начиная сindex
меньшеcount
, вместоcount
будет использовано количество оставшихся элементов. - Принимает булевое значение
cut
, сообщающее о необходимости вырезать полученный "срез" данных изsrc
. - Возвращает итоговое количество элементов, вошедших в "срез".
- Принимает указатель на область памяти, содержащую инициализируемый контейнер
-
void list_sort(vtype_list* x)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
x
. - Производит быструю сортировку значений в контейнере (от меньшего к большему).
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
-
void list_reverse(vtype_list* x)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
x
. - Переворачивает последовательность элементов в контейнере.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
Макросы
-
int list_pop(vtype_list* x, T value, void* data, CallbackT callback)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
x
. - Принимает числовое значение, указатель на C-строку или указатель на область памяти, содержащую один из контейнеров, поставляемых вместе с данным проектом.
- Принимает указатель на произвольные пользовательские данные
data
- Принимает указатель на функцию-callback (см. начало текущего документа)
- Вызывает callback-функцию c первым найденным значением, равным
value
, в качестве аргумента. После чего удаляет найденный объект из контейнера. - Возвращает -1, если значение равное
value
не было найдено внутри контейнера. В противном случае возвращает значение возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
-
int list_find(vtype_list* x, T value, void* data, CallbackT callback)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
x
. - Принимает числовое значение, указатель на C-строку или указатель на область памяти, содержащую один из контейнеров, поставляемых вместе с данным проектом.
- Принимает указатель на произвольные пользовательские данные
data
- Принимает указатель на функцию-callback (см. начало текущего документа)
- Вызывает callback-функцию c первым найденным значением, равным
value
, в качестве аргумента. - Возвращает -1, если значение равное
value
не было найдено внутри контейнера. В противном случае возвращает значение возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
-
int list_rfind(vtype_list* x, T value, void* data, CallbackT callback)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
x
. - Принимает числовое значение, указатель на C-строку или указатель на область памяти, содержащую один из контейнеров, поставляемых вместе с данным проектом.
- Принимает указатель на произвольные пользовательские данные
data
- Принимает указатель на функцию-callback (см. начало текущего документа)
- Вызывает callback-функцию c последним найденным значением, равным
value
, в качестве аргумента. - Возвращает -1, если значение равное
value
не было найдено внутри контейнера. В противном случае возвращает значение возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
-
size_t list_countof(vtype_list* x, T value)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
x
. - Принимает числовое значение, указатель на C-строку или указатель на область памяти, содержащую один из контейнеров, поставляемых вместе с данным проектом.
- Возвращает количество элементов, равных
value
(см. 1.1. Система типов).
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
-
int list_remove(vtype_list* x, T value)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
x
. - Принимает числовое значение, указатель на C-строку или указатель на область памяти, содержащую один из контейнеров, поставляемых вместе с данным проектом.
- Возвращает
0
, в случае успешного удаления элемента, или-1
в случае, если значениеvalue
не было найдено.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
-
bool in_list(vtype_list* x, T value)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
x
. - Принимает числовое значение, указатель на C-строку или указатель на область памяти, содержащую один из контейнеров, поставляемых вместе с данным проектом.
- Возвращает
true
если значениеvalue
найдено в контейнере, в противном случае, возвращаетfalse
.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
-
bool list_insert(vtype_list* x, ssize_t index, T value)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
x
. - Принимает значение индекса данных
index
, которые следует вставить. Отрицательные значения индекса указывают на элементы, начианая с последнего (где индекс -1 указывает на последний элемент массива). Если отрицательное значение индекса по модулю превышает размерность массива, то будет считаться, что запрос сделан с индексом равным нулю. - Принимает числовое значение, указатель на C-строку или указатель на область памяти, содержащую один из контейнеров, поставляемых вместе с данным проектом.
- Вставляет
value
по указанному индексу, сдвигая уже существующие данные, в следующую ячейку. Если индекс выходит за границы области памяти, принадлежащей контейнеру, вставка производится в конец контейнера. - Возвращает
true
.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
-
bool list_replace(vtype_list* x, ssize_t index, T value)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
x
. - Принимает значение индекса данных
index
, которые следует заменить. Отрицательные значения индекса указывают на элементы, начианая с последнего (где индекс -1 указывает на последний элемент массива). Если отрицательное значение индекса по модулю превышает размерность массива, то будет считаться, что запрос сделан с индексом равным нулю. - Принимает числовое значение, указатель на C-строку или указатель на область памяти, содержащую один из контейнеров, поставляемых вместе с данным проектом.
- Производит замену данных, находящихся по заданному индексу, на
value
. - Возвращает
true
, если замена произведена успешно иfalse
, если индекс выходит за границы области памяти, принадлежащей контейнеру.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
-
bool list_push_back(vtype_list* x, T value)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
x
. - Принимает числовое значение, указатель на C-строку или указатель на область памяти, содержащую один из контейнеров, поставляемых вместе с данным проектом.
- Добавляет полученное значение
value
в конец последовательности элементов контейнера. - Возвращает
true
.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
-
bool list_push_front(vtype_list* x, T value)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
x
. - Принимает числовое значение, указатель на C-строку или указатель на область памяти, содержащую один из контейнеров, поставляемых вместе с данным проектом.
- Добавляет полученное значение
value
в начало последовательности элементов контейнера. - Возвращает
true
.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
include/extra/list.h
Макросы
-
int list_get_by_index(vtype_list* x, ssize_t index, void* data, CallbackT callback)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
x
. - Принимает значение индекса данных
index
, которые следует вернуть. Отрицательные значения индекса указывают на элементы, начианая с последнего (где индекс -1 указывает на последний элемент контейнера). Если отрицательное значение индекса по модулю превышает размерность контейнера, то будет считаться, что запрос сделан с индексом равным нулю. - Принимает указатель на произвольные пользовательские данные
data
. - Принимает указатель на функцию-callback (см. начало текущего документа).
- Вызывает callback-функцию cо значением находящимся по запрошенному индексу, в качестве аргумента.
- Возвращает -1, если индекс выходит за границы области памяти, принадлежащей контейнеру. В противном случае возвращает значение возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
-
int list_pop_by_index(vtype_list* x, ssize_t index, void* data, CallbackT callback)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
x
. - Принимает значение индекса данных
index
, которые следует вернуть. Отрицательные значения индекса указывают на элементы, начианая с последнего (где индекс -1 указывает на последний элемент контейнера). Если отрицательное значение индекса по модулю превышает размерность контейнера, то будет считаться, что запрос сделан с индексом равным нулю. - Принимает указатель на произвольные пользовательские данные
data
. - Принимает указатель на функцию-callback (см. начало текущего документа).
- Вызывает callback-функцию cо значением находящимся по запрошенному индексу, в качестве аргумента. После чего удаляет данный объект из контейнера.
- Возвращает -1, если индекс выходит за границы области памяти, принадлежащей контейнеру. В противном случае возвращает значение возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
-
int list_remove_by_index(vtype_list* x, ssize_t index)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
x
. - Принимает значение индекса данных
index
, которые следует вернуть. Отрицательные значения индекса указывают на элементы, начианая с последнего (где индекс -1 указывает на последний элемент контейнера). Если отрицательное значение индекса по модулю превышает размерность контейнера, то будет считаться, что запрос сделан с индексом равным нулю. - Возвращает
0
, в случае успешного удаления элемента, или-1
в случае, если индекс выходит за границы области памяти, принадлежащей контейнеру.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
-
int list_foreach(vtype_list* x, void* data, CallbackT callback)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
x
. - Принимает указатель на произвольные пользовательские данные
data
. - Принимает указатель на функцию-callback (см. начало текущего документа).
- Вызывает callback-функцию последовательно, с каждым элементом контейнера, в качестве аргумента. Если callback возвращает значение отличное от 0, то перебор будет прерван.
- Возвращает 0, в случае успеха, или любое другое значение, возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
Дополнительный блок
-
bool libcdsb_list_update(vtype_list* x, ssize_t index, const void* value, vtype type, int ins_direction)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
x
. - Принимает значение индекса "якорных" данных
index
, определяющих место, на основании которого, будет произведено дальнейшее изменение контейнера. Отрицательные значения индекса указывают на элементы, начианая с последнего (где индекс -1 указывает на последний элемент контейнера). Если отрицательное значение индекса по модулю превышает размерность контейнера, то будет считаться, что запрос сделан с индексом равным нулю. - Принимает указатель на передаваемые данные
value
. - Принимает константу идентификатора типа данных
value_type
. - Принимает значение
ins_direction
которое определяет то, будут ли данные по указанному индексу заменены (значениеins_direction == 0
), или будет произведена вставкаvalue
: в ячейку перед индексом (значениеins_direction < 0
) или в ячейку после (значениеins_direction > 0
) - Производит вставку или замену данных в контейнере, на оснавнии значения
ins_direction
иindex
- Возвращает
true
при успехе иfalse
, если индекс выходит за границы области памяти, принадлежащей контейнеру (только в случае, еслиins_direction == 0
.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
-
size_t libcdsb_list_count(const vtype_list* s, const void* value, vtype type)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
x
. - Принимает указатель на передаваемые данные
value
. - Принимает константу идентификатора типа данных
value_type
. - Возвращает количество элементов, равных
value
(см. 1.1. Система типов).
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
-
int libcdsb_list_find(vtype_list* x, const void* value, vtype type, void* data, CallbackT callback, bool reverse, bool cut)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
x
. - Принимает указатель на передаваемые данные
value
. - Принимает константу идентификатора типа данных
value_type
. - Принимает указатель на произвольные пользовательские данные
data
. - Принимает указатель на функцию-callback (см. начало текущего документа).
- Принимает bool значение
reverse
указывающее на необходимость поиска значения с конца. - Принимает bool значение
cut
, указывающее на необходимость удаление найденного элемента. - Вызывает callback-функцию c первым найденным значением, равным
value
, в качестве аргумента. - Возвращает -1, если значение равное
value
не было найдено внутри контейнера. В противном случае возвращает значение возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
-
int libcdsb_list_get(vtype_list* x, ssize_t index, void* data, CallbackT callback, bool cut)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
x
. - Принимает значение индекса данных
index
, которые следует вернуть. Отрицательные значения индекса указывают на элементы, начианая с последнего (где индекс -1 указывает на последний элемент контейнера). Если отрицательное значение индекса по модулю превышает размерность контейнера, то будет считаться, что запрос сделан с индексом равным нулю. - Принимает указатель на произвольные пользовательские данные
data
. - Принимает указатель на функцию-callback (см. начало текущего документа).
- Принимает bool значение
cut
, указывающее на необходимость удаление элемента по указанному индексу. - Возвращает -1, если индекс выходит за границы области памяти, принадлежащей контейнеру. В противном случае возвращает значение возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
-
int libcdsb_list_foreach(vtype_list* x, void* data, CallbackT callback, bool flush)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list
x
. - Принимает указатель на произвольные пользовательские данные
data
. - Принимает указатель на функцию-callback (см. начало текущего документа).
- Принимает bool значение
flush
, указывающее на необходимость очистки контейнера после выполнения перебора. - Вызывает callback-функцию последовательно, с каждым элементом контейнера, в качестве аргумента. Если callback возвращает значение отличное от 0, то перебор будет прерван. Если установлен флаг
flush
, то очистка контейнера произойдет в любом случае, вне зависимости от того, было ли прерывание перебора со стороны пользователя. - Возвращает 0, в случае успеха, или любое другое значение, возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_list