|
@@ -4,17 +4,11 @@ ctypedef void* (*mem_alloc_ft)(size_t size)
|
|
ctypedef void* (*mem_calloc_ft)(size_t blocks, size_t size)
|
|
ctypedef void* (*mem_calloc_ft)(size_t blocks, size_t size)
|
|
ctypedef void (*mem_free_ft)(void* block)
|
|
ctypedef void (*mem_free_ft)(void* block)
|
|
ctypedef size_t (*hash_ft)(const void* key, int l, uint32_t seed)
|
|
ctypedef size_t (*hash_ft)(const void* key, int l, uint32_t seed)
|
|
-ctypedef bint (*key_compare_ft)(const void* key1, const void* key2)
|
|
|
|
|
|
+ctypedef int (*key_compare_ft)(const void* key1, const void* key2)
|
|
|
|
|
|
|
|
|
|
cdef extern from "common.h":
|
|
cdef extern from "common.h":
|
|
|
|
|
|
- int cc_common_cmp_str(const void* key1, const void* key2)
|
|
|
|
-
|
|
|
|
- int cc_common_cmp_ptr(const void* key1, const void* key2)
|
|
|
|
-
|
|
|
|
-cdef extern from "array.h":
|
|
|
|
-
|
|
|
|
cdef enum cc_stat:
|
|
cdef enum cc_stat:
|
|
CC_OK
|
|
CC_OK
|
|
CC_ERR_ALLOC
|
|
CC_ERR_ALLOC
|
|
@@ -25,140 +19,147 @@ cdef extern from "array.h":
|
|
CC_ERR_VALUE_NOT_FOUND
|
|
CC_ERR_VALUE_NOT_FOUND
|
|
CC_ERR_OUT_OF_RANGE
|
|
CC_ERR_OUT_OF_RANGE
|
|
CC_ITER_END
|
|
CC_ITER_END
|
|
-
|
|
|
|
- ctypedef struct Array:
|
|
|
|
- pass
|
|
|
|
-
|
|
|
|
- ctypedef struct ArrayConf:
|
|
|
|
- size_t capacity
|
|
|
|
- float exp_factor
|
|
|
|
- mem_alloc_ft mem_alloc
|
|
|
|
- mem_calloc_ft mem_calloc
|
|
|
|
- mem_free_ft mem_free
|
|
|
|
-
|
|
|
|
- ctypedef struct ArrayIter:
|
|
|
|
- Array* ar
|
|
|
|
- size_t index
|
|
|
|
- bint last_removed
|
|
|
|
-
|
|
|
|
- ctypedef struct ArrayZipIter:
|
|
|
|
- Array* ar1
|
|
|
|
- Array* ar2
|
|
|
|
- size_t index
|
|
|
|
- bint last_removed
|
|
|
|
-
|
|
|
|
- cc_stat array_new(Array** out)
|
|
|
|
-
|
|
|
|
- cc_stat array_new_conf(ArrayConf* conf, Array** out)
|
|
|
|
-
|
|
|
|
- void array_conf_init(ArrayConf* conf)
|
|
|
|
-
|
|
|
|
- void array_destroy(Array* ar)
|
|
|
|
-
|
|
|
|
- ctypedef void (*_array_destroy_cb_cb_ft)(void*)
|
|
|
|
-
|
|
|
|
- void array_destroy_cb(Array* ar, _array_destroy_cb_cb_ft cb)
|
|
|
|
-
|
|
|
|
- #cc_stat array_add(Array* ar, void* element)
|
|
|
|
-
|
|
|
|
- #cc_stat array_add_at(Array* ar, void* element, size_t index)
|
|
|
|
-
|
|
|
|
- cc_stat array_replace_at(Array* ar, void* element, size_t index, void** out)
|
|
|
|
-
|
|
|
|
- cc_stat array_swap_at(Array* ar, size_t index1, size_t index2)
|
|
|
|
-
|
|
|
|
- cc_stat array_remove(Array* ar, void* element, void** out)
|
|
|
|
-
|
|
|
|
- cc_stat array_remove_at(Array* ar, size_t index, void** out)
|
|
|
|
-
|
|
|
|
- cc_stat array_remove_last(Array* ar, void** out)
|
|
|
|
-
|
|
|
|
- void array_remove_all(Array* ar)
|
|
|
|
-
|
|
|
|
- void array_remove_all_free(Array* ar)
|
|
|
|
-
|
|
|
|
- cc_stat array_get_at(Array* ar, size_t index, void** out)
|
|
|
|
-
|
|
|
|
- cc_stat array_get_last(Array* ar, void** out)
|
|
|
|
-
|
|
|
|
- cc_stat array_subarray(Array* ar, size_t from_, size_t to, Array** out)
|
|
|
|
-
|
|
|
|
- cc_stat array_copy_shallow(Array* ar, Array** out)
|
|
|
|
-
|
|
|
|
- ctypedef void* (*_array_copy_deep_cp_ft)(void*)
|
|
|
|
-
|
|
|
|
- cc_stat array_copy_deep(Array* ar, _array_copy_deep_cp_ft cp, Array** out)
|
|
|
|
-
|
|
|
|
- void array_reverse(Array* ar)
|
|
|
|
-
|
|
|
|
- cc_stat array_trim_capacity(Array* ar)
|
|
|
|
-
|
|
|
|
- size_t array_contains(Array* ar, void* element)
|
|
|
|
-
|
|
|
|
- ctypedef int (*_array_contains_value_cmp_ft)(void*, void*)
|
|
|
|
-
|
|
|
|
- size_t array_contains_value(Array* ar, void* element, _array_contains_value_cmp_ft cmp)
|
|
|
|
-
|
|
|
|
- size_t array_size(Array* ar)
|
|
|
|
-
|
|
|
|
- size_t array_capacity(Array* ar)
|
|
|
|
-
|
|
|
|
- cc_stat array_index_of(Array* ar, void* element, size_t* index)
|
|
|
|
-
|
|
|
|
- ctypedef int (*_array_sort_cmp_ft)(void*, void*)
|
|
|
|
-
|
|
|
|
- void array_sort(Array* ar, _array_sort_cmp_ft cmp)
|
|
|
|
-
|
|
|
|
- ctypedef void (*_array_map_fn_ft)(void*)
|
|
|
|
-
|
|
|
|
- void array_map(Array* ar, _array_map_fn_ft fn)
|
|
|
|
-
|
|
|
|
- ctypedef void (*_array_reduce_fn_ft)(void*, void*, void*)
|
|
|
|
-
|
|
|
|
- void array_reduce(Array* ar, _array_reduce_fn_ft fn, void* result)
|
|
|
|
-
|
|
|
|
- ctypedef bint (*_array_filter_mut_predicate_ft)(void*)
|
|
|
|
-
|
|
|
|
- cc_stat array_filter_mut(Array* ar, _array_filter_mut_predicate_ft predicate)
|
|
|
|
-
|
|
|
|
- ctypedef bint (*_array_filter_predicate_ft)(void*)
|
|
|
|
-
|
|
|
|
- cc_stat array_filter(Array* ar, _array_filter_predicate_ft predicate, Array** out)
|
|
|
|
-
|
|
|
|
- void array_iter_init(ArrayIter* iter, Array* ar)
|
|
|
|
-
|
|
|
|
- cc_stat array_iter_next(ArrayIter* iter, void** out)
|
|
|
|
-
|
|
|
|
- cc_stat array_iter_remove(ArrayIter* iter, void** out)
|
|
|
|
-
|
|
|
|
- cc_stat array_iter_add(ArrayIter* iter, void* element)
|
|
|
|
-
|
|
|
|
- cc_stat array_iter_replace(ArrayIter* iter, void* element, void** out)
|
|
|
|
-
|
|
|
|
- size_t array_iter_index(ArrayIter* iter)
|
|
|
|
-
|
|
|
|
- void array_zip_iter_init(ArrayZipIter* iter, Array* a1, Array* a2)
|
|
|
|
-
|
|
|
|
- cc_stat array_zip_iter_next(ArrayZipIter* iter, void** out1, void** out2)
|
|
|
|
-
|
|
|
|
- cc_stat array_zip_iter_add(ArrayZipIter* iter, void* e1, void* e2)
|
|
|
|
-
|
|
|
|
- cc_stat array_zip_iter_remove(ArrayZipIter* iter, void** out1, void** out2)
|
|
|
|
-
|
|
|
|
- cc_stat array_zip_iter_replace(ArrayZipIter* iter, void* e1, void* e2, void** out1, void** out2)
|
|
|
|
-
|
|
|
|
- size_t array_zip_iter_index(ArrayZipIter* iter)
|
|
|
|
-
|
|
|
|
- void** array_get_buffer(Array* ar)
|
|
|
|
|
|
+ CC_DUP_KEY
|
|
|
|
+#
|
|
|
|
+# int cc_common_cmp_str(const void* key1, const void* key2)
|
|
|
|
+#
|
|
|
|
+# int cc_common_cmp_ptr(const void* key1, const void* key2)
|
|
|
|
+
|
|
|
|
+#cdef extern from "array.h":
|
|
|
|
+
|
|
|
|
+# ctypedef struct Array:
|
|
|
|
+# pass
|
|
|
|
+#
|
|
|
|
+# ctypedef struct ArrayConf:
|
|
|
|
+# size_t capacity
|
|
|
|
+# float exp_factor
|
|
|
|
+# mem_alloc_ft mem_alloc
|
|
|
|
+# mem_calloc_ft mem_calloc
|
|
|
|
+# mem_free_ft mem_free
|
|
|
|
+#
|
|
|
|
+# ctypedef struct ArrayIter:
|
|
|
|
+# Array* ar
|
|
|
|
+# size_t index
|
|
|
|
+# bint last_removed
|
|
|
|
+#
|
|
|
|
+# ctypedef struct ArrayZipIter:
|
|
|
|
+# Array* ar1
|
|
|
|
+# Array* ar2
|
|
|
|
+# size_t index
|
|
|
|
+# bint last_removed
|
|
|
|
+#
|
|
|
|
+# cc_stat array_new(Array** out)
|
|
|
|
+#
|
|
|
|
+# cc_stat array_new_conf(ArrayConf* conf, Array** out)
|
|
|
|
+#
|
|
|
|
+# void array_conf_init(ArrayConf* conf)
|
|
|
|
+#
|
|
|
|
+# void array_destroy(Array* ar)
|
|
|
|
+#
|
|
|
|
+# ctypedef void (*_array_destroy_cb_cb_ft)(void*)
|
|
|
|
+#
|
|
|
|
+# void array_destroy_cb(Array* ar, _array_destroy_cb_cb_ft cb)
|
|
|
|
+#
|
|
|
|
+# #cc_stat array_add(Array* ar, void* element)
|
|
|
|
+#
|
|
|
|
+# #cc_stat array_add_at(Array* ar, void* element, size_t index)
|
|
|
|
+#
|
|
|
|
+# cc_stat array_replace_at(Array* ar, void* element, size_t index, void** out)
|
|
|
|
+#
|
|
|
|
+# cc_stat array_swap_at(Array* ar, size_t index1, size_t index2)
|
|
|
|
+#
|
|
|
|
+# cc_stat array_remove(Array* ar, void* element, void** out)
|
|
|
|
+#
|
|
|
|
+# cc_stat array_remove_at(Array* ar, size_t index, void** out)
|
|
|
|
+#
|
|
|
|
+# cc_stat array_remove_last(Array* ar, void** out)
|
|
|
|
+#
|
|
|
|
+# void array_remove_all(Array* ar)
|
|
|
|
+#
|
|
|
|
+# void array_remove_all_free(Array* ar)
|
|
|
|
+#
|
|
|
|
+# cc_stat array_get_at(Array* ar, size_t index, void** out)
|
|
|
|
+#
|
|
|
|
+# cc_stat array_get_last(Array* ar, void** out)
|
|
|
|
+#
|
|
|
|
+# cc_stat array_subarray(Array* ar, size_t from_, size_t to, Array** out)
|
|
|
|
+#
|
|
|
|
+# cc_stat array_copy_shallow(Array* ar, Array** out)
|
|
|
|
+#
|
|
|
|
+# ctypedef void* (*_array_copy_deep_cp_ft)(void*)
|
|
|
|
+#
|
|
|
|
+# cc_stat array_copy_deep(Array* ar, _array_copy_deep_cp_ft cp, Array** out)
|
|
|
|
+#
|
|
|
|
+# void array_reverse(Array* ar)
|
|
|
|
+#
|
|
|
|
+# cc_stat array_trim_capacity(Array* ar)
|
|
|
|
+#
|
|
|
|
+# size_t array_contains(Array* ar, void* element)
|
|
|
|
+#
|
|
|
|
+# ctypedef int (*_array_contains_value_cmp_ft)(void*, void*)
|
|
|
|
+#
|
|
|
|
+# size_t array_contains_value(Array* ar, void* element, _array_contains_value_cmp_ft cmp)
|
|
|
|
+#
|
|
|
|
+# size_t array_size(Array* ar)
|
|
|
|
+#
|
|
|
|
+# size_t array_capacity(Array* ar)
|
|
|
|
+#
|
|
|
|
+# cc_stat array_index_of(Array* ar, void* element, size_t* index)
|
|
|
|
+#
|
|
|
|
+# ctypedef int (*_array_sort_cmp_ft)(void*, void*)
|
|
|
|
+#
|
|
|
|
+# void array_sort(Array* ar, _array_sort_cmp_ft cmp)
|
|
|
|
+#
|
|
|
|
+# ctypedef void (*_array_map_fn_ft)(void*)
|
|
|
|
+#
|
|
|
|
+# void array_map(Array* ar, _array_map_fn_ft fn)
|
|
|
|
+#
|
|
|
|
+# ctypedef void (*_array_reduce_fn_ft)(void*, void*, void*)
|
|
|
|
+#
|
|
|
|
+# void array_reduce(Array* ar, _array_reduce_fn_ft fn, void* result)
|
|
|
|
+#
|
|
|
|
+# ctypedef bint (*_array_filter_mut_predicate_ft)(void*)
|
|
|
|
+#
|
|
|
|
+# cc_stat array_filter_mut(Array* ar, _array_filter_mut_predicate_ft predicate)
|
|
|
|
+#
|
|
|
|
+# ctypedef bint (*_array_filter_predicate_ft)(void*)
|
|
|
|
+#
|
|
|
|
+# cc_stat array_filter(Array* ar, _array_filter_predicate_ft predicate, Array** out)
|
|
|
|
+#
|
|
|
|
+# void array_iter_init(ArrayIter* iter, Array* ar)
|
|
|
|
+#
|
|
|
|
+# cc_stat array_iter_next(ArrayIter* iter, void** out)
|
|
|
|
+#
|
|
|
|
+# cc_stat array_iter_remove(ArrayIter* iter, void** out)
|
|
|
|
+#
|
|
|
|
+# cc_stat array_iter_add(ArrayIter* iter, void* element)
|
|
|
|
+#
|
|
|
|
+# cc_stat array_iter_replace(ArrayIter* iter, void* element, void** out)
|
|
|
|
+#
|
|
|
|
+# size_t array_iter_index(ArrayIter* iter)
|
|
|
|
+#
|
|
|
|
+# void array_zip_iter_init(ArrayZipIter* iter, Array* a1, Array* a2)
|
|
|
|
+#
|
|
|
|
+# cc_stat array_zip_iter_next(ArrayZipIter* iter, void** out1, void** out2)
|
|
|
|
+#
|
|
|
|
+# cc_stat array_zip_iter_add(ArrayZipIter* iter, void* e1, void* e2)
|
|
|
|
+#
|
|
|
|
+# cc_stat array_zip_iter_remove(ArrayZipIter* iter, void** out1, void** out2)
|
|
|
|
+#
|
|
|
|
+# cc_stat array_zip_iter_replace(ArrayZipIter* iter, void* e1, void* e2, void** out1, void** out2)
|
|
|
|
+#
|
|
|
|
+# size_t array_zip_iter_index(ArrayZipIter* iter)
|
|
|
|
+#
|
|
|
|
+# void** array_get_buffer(Array* ar)
|
|
|
|
|
|
|
|
|
|
cdef extern from "hashtable.h":
|
|
cdef extern from "hashtable.h":
|
|
|
|
|
|
- ctypedef struct TableEntry:
|
|
|
|
- void* key
|
|
|
|
- void* value
|
|
|
|
- size_t hash
|
|
|
|
- TableEntry* next
|
|
|
|
|
|
+# ctypedef struct TableEntry:
|
|
|
|
+# void* key
|
|
|
|
+# void* value
|
|
|
|
+# size_t hash
|
|
|
|
+# TableEntry* next
|
|
|
|
|
|
ctypedef struct HashTable:
|
|
ctypedef struct HashTable:
|
|
pass
|
|
pass
|
|
@@ -176,58 +177,59 @@ cdef extern from "hashtable.h":
|
|
mem_free_ft mem_free
|
|
mem_free_ft mem_free
|
|
|
|
|
|
ctypedef struct HashTableIter:
|
|
ctypedef struct HashTableIter:
|
|
- HashTable* table
|
|
|
|
- size_t bucket_index
|
|
|
|
- TableEntry* prev_entry
|
|
|
|
- TableEntry* next_entry
|
|
|
|
-
|
|
|
|
- size_t get_table_index(HashTable *table, void *key)
|
|
|
|
-
|
|
|
|
- void hashtable_conf_init(HashTableConf* conf)
|
|
|
|
-
|
|
|
|
- cc_stat hashtable_new(HashTable** out)
|
|
|
|
-
|
|
|
|
- cc_stat hashtable_new_conf(HashTableConf* conf, HashTable** out)
|
|
|
|
-
|
|
|
|
- void hashtable_destroy(HashTable* table)
|
|
|
|
-
|
|
|
|
- cc_stat hashtable_add(HashTable* table, void* key, void* val)
|
|
|
|
-
|
|
|
|
- cc_stat hashtable_get(HashTable* table, void* key, void** out)
|
|
|
|
-
|
|
|
|
- cc_stat hashtable_remove(HashTable* table, void* key, void** out)
|
|
|
|
-
|
|
|
|
- void hashtable_remove_all(HashTable* table)
|
|
|
|
-
|
|
|
|
- bint hashtable_contains_key(HashTable* table, void* key)
|
|
|
|
-
|
|
|
|
- size_t hashtable_size(HashTable* table)
|
|
|
|
-
|
|
|
|
- size_t hashtable_capacity(HashTable* table)
|
|
|
|
-
|
|
|
|
- cc_stat hashtable_get_keys(HashTable* table, Array** out)
|
|
|
|
-
|
|
|
|
- cc_stat hashtable_get_values(HashTable* table, Array** out)
|
|
|
|
-
|
|
|
|
- size_t hashtable_hash_string(void* key, int len, uint32_t seed)
|
|
|
|
-
|
|
|
|
- size_t hashtable_hash(void* key, int len, uint32_t seed)
|
|
|
|
-
|
|
|
|
- size_t hashtable_hash_ptr(void* key, int len, uint32_t seed)
|
|
|
|
-
|
|
|
|
- ctypedef void (*_hashtable_foreach_key_op_ft)(void*)
|
|
|
|
-
|
|
|
|
- void hashtable_foreach_key(HashTable* table, _hashtable_foreach_key_op_ft op)
|
|
|
|
-
|
|
|
|
- ctypedef void (*_hashtable_foreach_value_op_ft)(void*)
|
|
|
|
-
|
|
|
|
- void hashtable_foreach_value(HashTable* table, _hashtable_foreach_value_op_ft op)
|
|
|
|
-
|
|
|
|
- void hashtable_iter_init(HashTableIter* iter, HashTable* table)
|
|
|
|
-
|
|
|
|
- cc_stat hashtable_iter_next(HashTableIter* iter, TableEntry** out)
|
|
|
|
-
|
|
|
|
- cc_stat hashtable_iter_remove(HashTableIter* iter, void** out)
|
|
|
|
|
|
+ pass
|
|
|
|
+# HashTable* table
|
|
|
|
+# size_t bucket_index
|
|
|
|
+# TableEntry* prev_entry
|
|
|
|
+# TableEntry* next_entry
|
|
|
|
+#
|
|
|
|
+# size_t get_table_index(HashTable *table, void *key)
|
|
|
|
+#
|
|
|
|
+# void hashtable_conf_init(HashTableConf* conf)
|
|
|
|
+#
|
|
|
|
+# cc_stat hashtable_new(HashTable** out)
|
|
|
|
+#
|
|
|
|
+# cc_stat hashtable_new_conf(HashTableConf* conf, HashTable** out)
|
|
|
|
+#
|
|
|
|
+# void hashtable_destroy(HashTable* table)
|
|
|
|
+#
|
|
|
|
+# cc_stat hashtable_add(HashTable* table, void* key, void* val)
|
|
|
|
+#
|
|
|
|
+# cc_stat hashtable_get(HashTable* table, void* key, void** out)
|
|
|
|
+#
|
|
|
|
+# cc_stat hashtable_remove(HashTable* table, void* key, void** out)
|
|
|
|
+#
|
|
|
|
+# void hashtable_remove_all(HashTable* table)
|
|
|
|
+#
|
|
|
|
+# bint hashtable_contains_key(HashTable* table, void* key)
|
|
|
|
+#
|
|
|
|
+# size_t hashtable_size(HashTable* table)
|
|
|
|
+#
|
|
|
|
+# size_t hashtable_capacity(HashTable* table)
|
|
|
|
+#
|
|
|
|
+# cc_stat hashtable_get_keys(HashTable* table, Array** out)
|
|
|
|
+#
|
|
|
|
+# cc_stat hashtable_get_values(HashTable* table, Array** out)
|
|
|
|
+#
|
|
|
|
+# size_t hashtable_hash_string(void* key, int len, uint32_t seed)
|
|
|
|
+#
|
|
|
|
+# size_t hashtable_hash(void* key, int len, uint32_t seed)
|
|
|
|
+#
|
|
|
|
+# size_t hashtable_hash_ptr(void* key, int len, uint32_t seed)
|
|
|
|
+#
|
|
|
|
+# ctypedef void (*_hashtable_foreach_key_op_ft)(void*)
|
|
|
|
+#
|
|
|
|
+# void hashtable_foreach_key(HashTable* table, _hashtable_foreach_key_op_ft op)
|
|
|
|
+#
|
|
|
|
+# ctypedef void (*_hashtable_foreach_value_op_ft)(void*)
|
|
|
|
+#
|
|
|
|
+# void hashtable_foreach_value(HashTable* table, _hashtable_foreach_value_op_ft op)
|
|
|
|
+#
|
|
|
|
+# void hashtable_iter_init(HashTableIter* iter, HashTable* table)
|
|
|
|
+#
|
|
|
|
+# cc_stat hashtable_iter_next(HashTableIter* iter, TableEntry** out)
|
|
|
|
+#
|
|
|
|
+# cc_stat hashtable_iter_remove(HashTableIter* iter, void** out)
|
|
|
|
|
|
|
|
|
|
cdef extern from "hashset.h":
|
|
cdef extern from "hashset.h":
|