Skip to content

Commit ad15e6a

Browse files
authored
Add list membership API and uint64 hash utilities (#1103)
1 parent 656a2ef commit ad15e6a

File tree

6 files changed

+51
-0
lines changed

6 files changed

+51
-0
lines changed

include/aws/common/hash_table.h

+10
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,16 @@ bool aws_hash_table_is_valid(const struct aws_hash_table *map);
434434
AWS_COMMON_API
435435
bool aws_hash_iter_is_valid(const struct aws_hash_iter *iter);
436436

437+
/**
438+
* Helper function to hash keys that are uint64_t values.
439+
*/
440+
AWS_COMMON_API uint64_t aws_hash_uint64_t(const void *item);
441+
442+
/**
443+
* Helper function to compare hash keys that are uint64_t values.
444+
*/
445+
AWS_COMMON_API bool aws_hash_compare_uint64_t_eq(const void *a, const void *b);
446+
437447
AWS_EXTERN_C_END
438448
AWS_POP_SANE_WARNING_LEVEL
439449

include/aws/common/linked_list.h

+5
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,11 @@ AWS_STATIC_IMPL void aws_linked_list_move_all_front(
182182
struct aws_linked_list *AWS_RESTRICT dst,
183183
struct aws_linked_list *AWS_RESTRICT src);
184184

185+
/**
186+
* Returns true if the node is currently in a list, false otherwise.
187+
*/
188+
AWS_STATIC_IMPL bool aws_linked_list_node_is_in_list(struct aws_linked_list_node *node);
189+
185190
#ifndef AWS_NO_STATIC_IMPL
186191
# include <aws/common/linked_list.inl>
187192
#endif /* AWS_NO_STATIC_IMPL */

include/aws/common/linked_list.inl

+4
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,10 @@ AWS_STATIC_IMPL void aws_linked_list_move_all_front(
431431
AWS_POSTCONDITION(aws_linked_list_is_valid(dst));
432432
}
433433

434+
AWS_STATIC_IMPL bool aws_linked_list_node_is_in_list(struct aws_linked_list_node *node) {
435+
return aws_linked_list_node_prev_is_valid(node) && aws_linked_list_node_next_is_valid(node);
436+
}
437+
434438
AWS_EXTERN_C_END
435439

436440
#endif /* AWS_COMMON_LINKED_LIST_INL */

source/hash_table.c

+8
Original file line numberDiff line numberDiff line change
@@ -1104,3 +1104,11 @@ int hash_table_state_required_bytes(size_t size, size_t *required_bytes) {
11041104

11051105
return AWS_OP_SUCCESS;
11061106
}
1107+
1108+
uint64_t aws_hash_uint64_t(const void *item) {
1109+
return *(uint64_t *)item;
1110+
}
1111+
1112+
bool aws_hash_compare_uint64_t_eq(const void *a, const void *b) {
1113+
return *(uint64_t *)a == *(uint64_t *)b;
1114+
}

tests/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ add_test_case(linked_list_reverse_iteration)
105105
add_test_case(linked_list_swap_contents)
106106
add_test_case(linked_list_move_all_back)
107107
add_test_case(linked_list_move_all_front)
108+
add_test_case(linked_list_node_in_list)
108109

109110
add_test_case(hex_encoding_test_case_empty_test)
110111
add_test_case(hex_encoding_test_case_f_test)

tests/linked_list_test.c

+23
Original file line numberDiff line numberDiff line change
@@ -518,3 +518,26 @@ AWS_TEST_CASE(linked_list_reverse_iteration, s_test_linked_list_reverse_iteratio
518518
AWS_TEST_CASE(linked_list_swap_contents, s_test_linked_list_swap_contents)
519519
AWS_TEST_CASE(linked_list_move_all_back, s_test_linked_list_move_all_back)
520520
AWS_TEST_CASE(linked_list_move_all_front, s_test_linked_list_move_all_front)
521+
522+
static int s_linked_list_node_in_list_fn(struct aws_allocator *allocator, void *ctx) {
523+
(void)allocator;
524+
(void)ctx;
525+
526+
struct aws_linked_list list;
527+
aws_linked_list_init(&list);
528+
529+
struct aws_linked_list_node node;
530+
AWS_ZERO_STRUCT(node);
531+
532+
ASSERT_FALSE(aws_linked_list_node_is_in_list(&node));
533+
534+
aws_linked_list_push_back(&list, &node);
535+
ASSERT_TRUE(aws_linked_list_node_is_in_list(&node));
536+
aws_linked_list_remove(&node);
537+
538+
ASSERT_FALSE(aws_linked_list_node_is_in_list(&node));
539+
540+
return AWS_OP_SUCCESS;
541+
}
542+
543+
AWS_TEST_CASE(linked_list_node_in_list, s_linked_list_node_in_list_fn)

0 commit comments

Comments
 (0)