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_array
Классический массив, позволяющий размещать внутри себя значения, с заранее известным типом (тем типом, которому соответствует константа из перечисления vtype, переданная при инициализации контейнера).
include/array.h
Интерфейс callback-функции доступа к элементу (далее CallbackT)
-
int callback(void* value, ssize_t index, vtype type, void* data)
value
: указатель на область памяти, в которой располагается значение данных ячейки контейнера, доступ к которой обеспечивается данной функцией.index
: индекс элемента, к которому обеспечивается доступ, в рамках контейнера.type
: значение типа, заданное константой перечисления vtype, соответствующее типу данных, к которым обеспечивается доступ.data
: произвольные пользовательские данные, которые будут переданны в callback вызывающим методом.
Базовый блок
-
void array_init(vtype_array* x, vtype type)
- Принимает указатель на область памяти, содержащую инициализируемый контейнер
x
. - Принимает значение типа
type
, определяющий тип содержащихся данных внутри инициализируемого контейнера. - Инициализирует контейнер, оставляя его пустым, позволяя использовать его в дальнейшей логике приложения.
- Принимает указатель на область памяти, содержащую инициализируемый контейнер
-
void* array_at(const vtype_array* s, ssize_t index)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
s
. - Принимает значение индекса данных
index
, которые следует вернуть. Отрицательные значения индекса указывают на элементы, начианая с последнего (где индекс -1 указывает на последний элемент массива). Если отрицательное значение индекса по модулю превышает размерность массива, то будет считаться, что запрос сделан с индексом равным нулю. - Возвращает указатель на область памяти, в которой находятся запрошенные данные, либо NULL, если индекс выходит за границы области памяти, принадлежащей контейнеру.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
-
size_t array_slice(vtype_array* x, vtype_array* src, ssize_t index, size_t count, bool cut)
- Принимает указатель на область памяти, содержащую инициализируемый контейнер
x
. - Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
src
. - Принимает значение индекса данных
index
, начиная с которого, требуется начать "срез" данных. Отрицательные значения индекса указывают на элементы, начианая с последнего (где индекс -1 указывает на последний элемент массива). Если отрицательное значение индекса по модулю превышает размерность массива, то будет считаться, что запрос сделан с индексом равным нулю. - Принимает значение количества элементов
count
, которым необходимо инициализироватьx
в рамках "среза" данныхsrc
, начиная сindex
. В случае, если количество элементов, начиная сindex
меньшеcount
, вместоcount
будет использовано количество оставшихся элементов. - Принимает булевое значение
cut
, сообщающее о необходимости вырезать полученный "срез" данных изsrc
. - Возвращает итоговое количество элементов, вошедших в "срез".
- Принимает указатель на область памяти, содержащую инициализируемый контейнер
-
void array_sort(vtype_array* x)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
x
. - Производит быструю сортировку значений в контейнере (от меньшего к большему).
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
-
void array_reverse(vtype_array* x)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
x
. - Переворачивает последовательность элементов в контейнере.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
Макросы
-
void array_push_back(vtype_array* x, T value)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
x
. - Принимает числовое значение, указатель на C-строку или указатель на область памяти, содержащую один из контейнеров, поставляемых вместе с данным проектом.
- Добавляет полученное значение
value
в конец последовательности элементов контейнера. В случае, если производится попытка добавить значение, с несравнимым типом относительно типа, которым был инициализирован контейнер, находящийся в области памятиx
(см. 1.1. Система типов), будет вызван системный вызовabort()
.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
-
size_t array_countof(vtype_array* x, T value)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
x
. - Принимает числовое значение, указатель на C-строку или указатель на область памяти, содержащую один из контейнеров, поставляемых вместе с данным проектом.
- Возвращает количество элементов, равных
value
(см. 1.1. Система типов).
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
-
int array_remove(vtype_array* x, T value)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
x
. - Принимает числовое значение, указатель на C-строку или указатель на область памяти, содержащую один из контейнеров, поставляемых вместе с данным проектом.
- Возвращает
0
, в случае успешного удаления элемента, или-1
в случае, если значениеvalue
не было найдено.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
-
bool in_array(vtype_array* x, T value)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
x
. - Принимает числовое значение, указатель на C-строку или указатель на область памяти, содержащую один из контейнеров, поставляемых вместе с данным проектом.
- Возвращает
true
если значениеvalue
есть в контейнере, в противном случае, возвращаетfalse
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
-
int array_pop(vtype_array* x, T value, void* data, CallbackT callback)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
x
. - Принимает числовое значение, указатель на C-строку или указатель на область памяти, содержащую один из контейнеров, поставляемых вместе с данным проектом.
- Принимает указатель на произвольные пользовательские данные
data
- Принимает указатель на функцию-callback (см. начало текущего документа)
- Вызывает callback-функцию c первым найденным значением, равным
value
, в качестве аргумента. После чего удаляет найденный объект из контейнера. - Возвращает -1, если значение равное
value
не было найдено внутри контейнера. В противном случае возвращает значение возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
-
int array_find(vtype_array* x, T value, void* data, CallbackT callback)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
x
. - Принимает числовое значение, указатель на C-строку или указатель на область памяти, содержащую один из контейнеров, поставляемых вместе с данным проектом.
- Принимает указатель на произвольные пользовательские данные
data
- Принимает указатель на функцию-callback (см. начало текущего документа)
- Вызывает callback-функцию c первым найденным значением, равным
value
, в качестве аргумента. - Возвращает -1, если значение равное
value
не было найдено внутри контейнера. В противном случае возвращает значение возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
-
int array_rfind(vtype_array* x, T value, void* data, CallbackT callback)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
x
. - Принимает числовое значение, указатель на C-строку или указатель на область памяти, содержащую один из контейнеров, поставляемых вместе с данным проектом.
- Принимает указатель на произвольные пользовательские данные
data
- Принимает указатель на функцию-callback (см. начало текущего документа)
- Вызывает callback-функцию c последним найденным значением, равным
value
, в качестве аргумента. - Возвращает -1, если значение равное
value
не было найдено внутри контейнера. В противном случае возвращает значение возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
include/extra/array.h
Макросы
-
int array_get_by_index(vtype_array* x, ssize_t index, void* data, CallbackT callback)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
x
. - Принимает значение индекса данных
index
, которые следует вернуть. Отрицательные значения индекса указывают на элементы, начианая с последнего (где индекс -1 указывает на последний элемент массива). Если отрицательное значение индекса по модулю превышает размерность массива, то будет считаться, что запрос сделан с индексом равным нулю. - Принимает указатель на произвольные пользовательские данные
data
. - Принимает указатель на функцию-callback (см. начало текущего документа).
- Вызывает callback-функцию cо значением находящимся по запрошенному индексу, в качестве аргумента.
- Возвращает -1, если индекс выходит за границы области памяти, принадлежащей контейнеру. В противном случае возвращает значение возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
-
int array_pop_by_index(vtype_array* x, ssize_t index, void* data, CallbackT callback)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
x
. - Принимает значение индекса данных
index
, которые следует вернуть. Отрицательные значения индекса указывают на элементы, начианая с последнего (где индекс -1 указывает на последний элемент массива). Если отрицательное значение индекса по модулю превышает размерность массива, то будет считаться, что запрос сделан с индексом равным нулю. - Принимает указатель на произвольные пользовательские данные
data
. - Принимает указатель на функцию-callback (см. начало текущего документа).
- Вызывает callback-функцию cо значением находящимся по запрошенному индексу, в качестве аргумента. После чего удаляет данный объект из контейнера.
- Возвращает -1, если индекс выходит за границы области памяти, принадлежащей контейнеру. В противном случае возвращает значение возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
-
int array_remove_by_index(vtype_array* x, ssize_t index)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
x
. - Принимает значение индекса данных
index
, которые следует вернуть. Отрицательные значения индекса указывают на элементы, начианая с последнего (где индекс -1 указывает на последний элемент массива). Если отрицательное значение индекса по модулю превышает размерность массива, то будет считаться, что запрос сделан с индексом равным нулю. - Возвращает
0
, в случае успешного удаления элемента, или-1
в случае, если индекс выходит за границы области памяти, принадлежащей контейнеру.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
-
int array_foreach(vtype_array* x, void* data, CallbackT callback)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
x
. - Принимает указатель на произвольные пользовательские данные
data
. - Принимает указатель на функцию-callback (см. начало текущего документа).
- Вызывает callback-функцию последовательно, с каждым элементом контейнера, в качестве аргумента. Если callback возвращает значение отличное от 0, то перебор будет прерван.
- Возвращает 0, в случае успеха, или любое другое значение, возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
Дополнительный блок
-
ssize_t libcdsb_array_push(vtype_array* x, const void* value, vtype value_type)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
x
. - Принимает указатель на передаваемые данные
value
. - Принимает константу идентификатора типа данных
value_type
. - Добавляет полученное значение
value
в конец последовательности элементов контейнера. В случае, если производится попытка добавить значение, с несравнимым типом относительно типа, которым был инициализирован контейнер, находящийся в области памятиx
(см. 1.1. Система типов), будет вызван системный вызовabort()
. - Возвращает индекс, по которому находятся добавленные в контейнер данные.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
-
size_t libcdsb_array_count(const vtype_array* s, const void* value, vtype type)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
x
. - Принимает указатель на передаваемые данные
value
. - Принимает константу идентификатора типа данных
value_type
. - Возвращает количество элементов, равных
value
(см. 1.1. Система типов).
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
-
int libcdsb_array_find(vtype_array* x, const void* value, vtype type, void* data, CallbackT callback, bool reverse, bool cut)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
x
. - Принимает указатель на передаваемые данные
value
. - Принимает константу идентификатора типа данных
value_type
. - Принимает указатель на произвольные пользовательские данные
data
. - Принимает указатель на функцию-callback (см. начало текущего документа).
- Принимает bool значение
reverse
указывающее на необходимость поиска значения с конца. - Принимает bool значение
cut
, указывающее на необходимость удаление найденного элемента. - Вызывает callback-функцию c первым найденным значением, равным
value
, в качестве аргумента. - Возвращает -1, если значение равное
value
не было найдено внутри контейнера. В противном случае возвращает значение возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
-
int libcdsb_array_get(vtype_array* x, ssize_t index, void* data, CallbackT callback, bool cut)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
x
. - Принимает значение индекса данных
index
, которые следует вернуть. Отрицательные значения индекса указывают на элементы, начианая с последнего (где индекс -1 указывает на последний элемент массива). Если отрицательное значение индекса по модулю превышает размерность массива, то будет считаться, что запрос сделан с индексом равным нулю. - Принимает указатель на произвольные пользовательские данные
data
. - Принимает указатель на функцию-callback (см. начало текущего документа).
- Принимает bool значение
cut
, указывающее на необходимость удаление элемента по указанному индексу. - Возвращает -1, если индекс выходит за границы области памяти, принадлежащей контейнеру. В противном случае возвращает значение возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
-
int libcdsb_array_foreach(vtype_array* x, void* data, CallbackT callback, bool flush)
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array
x
. - Принимает указатель на произвольные пользовательские данные
data
. - Принимает указатель на функцию-callback (см. начало текущего документа).
- Принимает bool значение
flush
, указывающее на необходимость очистки контейнера после выполнения перебора. - Вызывает callback-функцию последовательно, с каждым элементом контейнера, в качестве аргумента. Если callback возвращает значение отличное от 0, то перебор будет прерван. Если установлен флаг
flush
, то очистка контейнера произойдет в любом случае, вне зависимости от того, было ли прерывание перебора со стороны пользователя. - Возвращает 0, в случае успеха, или любое другое значение, возвращенное пользовательской callback-функцией.
- Принимает указатель на область памяти, содержащую инициализированное значение vtype_array