Skip to content
GitLab
Explore
Projects
Groups
Topics
Snippets
Projects
Groups
Topics
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Николаев Александр Александрович
libakrypt-0.x-parts-implementation
Commits
ae26ee41
Commit
ae26ee41
authored
7 months ago
by
Нестеренко Алексей Юрьевич
Browse files
Options
Download
Patches
Plain Diff
Добавлена функция ak_list_add_node_sorted()
parent
91258c82
master
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
Changelog.md
+3
-1
Changelog.md
source/ak_list.c
+43
-1
source/ak_list.c
source/libakrypt-base.h.in
+3
-0
source/libakrypt-base.h.in
with
49 additions
and
2 deletions
+49
-2
Changelog.md
+
3
−
1
View file @
ae26ee41
...
...
@@ -3,7 +3,9 @@
## Изменения в версии 0.9.15
-
В библиотеку libakrypt-base добавлена функция ak_time_to_str()
-
В библиотеку libakrypt-base добавлены функции
-
ak_time_to_str()
-
ak_list_add_node_sorted()
-
Добавлена поддержка опции сборки библиотеки, отвечающей за дополнительные проверки
корректной работы ряда криптографических алгоритмов
...
...
This diff is collapsed.
Click to expand it.
source/ak_list.c
+
43
−
1
View file @
ae26ee41
...
...
@@ -293,7 +293,49 @@
list
->
current
=
node
;
}
list
->
count
++
;
return
ak_error_ok
;
return
ak_error_ok
;
}
/* ----------------------------------------------------------------------------------------------- */
/*! @details Функция вставляет указатель в список, одновременно сортируя его.
* Для сортировки указателей успользуется пользовательская функция.
* @param list Указатель на контекст двусвязного списка
* @param node Добавляемый элемент двусвязного списка
* @param compare Функция, выполняющая сравнение данных,
* должна возвращать значения аналогично функции strcmp().
* @return В случае успеха функция фозвращает ноль (ak_error_ok). В противном случае,
* возвращается код ошибки */
/* ----------------------------------------------------------------------------------------------- */
int
ak_list_add_node_sorted
(
ak_list
list
,
ak_list_node
node
,
ak_function_compare_ptr
compare
)
{
if
(
!
list
)
return
ak_error_message
(
ak_error_null_pointer
,
__func__
,
"using null pointer to list context"
);
if
(
!
node
)
return
ak_error_null_pointer
;
if
(
!
compare
)
return
ak_error_message
(
ak_error_null_pointer
,
__func__
,
"using null pointer to compare function"
);
ak_list_first
(
list
);
if
(
list
->
current
==
NULL
)
list
->
current
=
node
;
else
{
/* начинаем обход списка */
do
{
if
(
compare
(
list
->
current
->
data
,
node
->
data
)
>=
0
)
{
/* вставляем перед текущим */
if
((
node
->
prev
=
list
->
current
->
prev
)
!=
NULL
)
{
node
->
prev
->
next
=
node
;
}
node
->
next
=
list
->
current
;
list
->
current
->
prev
=
node
;
goto
exlab
;
}
}
while
(
ak_list_next
(
list
));
/* здесь просто добавляем элемент в конец списка */
node
->
prev
=
list
->
current
;
list
->
current
->
next
=
node
;
list
->
current
=
node
;
}
exlab:
list
->
count
++
;
return
ak_error_ok
;
}
/* ----------------------------------------------------------------------------------------------- */
...
...
This diff is collapsed.
Click to expand it.
source/libakrypt-base.h.in
+
3
−
0
View file @
ae26ee41
...
...
@@ -365,6 +365,7 @@ extern "C" {
/* ----------------------------------------------------------------------------------------------- */
/*! \brief Функция, выполняющая операции по удалению объекта из памяти */
typedef ak_pointer ( ak_function_delete_object )( ak_pointer );
typedef int ( ak_function_compare_ptr )( ak_const_pointer, ak_const_pointer );
/* ----------------------------------------------------------------------------------------------- */
/*! \brief Двусвязный список. */
...
...
@@ -410,6 +411,8 @@ extern "C" {
dll_export ak_pointer ak_list_delete( ak_list );
/*! \brief Добавление нового узла к двусвязному списку. */
dll_export int ak_list_add_node( ak_list , ak_list_node );
/*! \brief Добавление нового узла к двусвязному списку. */
dll_export int ak_list_add_node_sorted( ak_list , ak_list_node , ak_function_compare_ptr );
/** @} */
/* ----------------------------------------------------------------------------------------------- */
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment
Menu
Explore
Projects
Groups
Topics
Snippets