collections.pxd 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. from libc.stdint cimport uint32_t
  2. cdef extern from "hashset.h":
  3. cdef enum cc_stat:
  4. CC_OK
  5. CC_ERR_ALLOC
  6. CC_ERR_INVALID_CAPACITY
  7. CC_ERR_INVALID_RANGE
  8. CC_ERR_MAX_CAPACITY
  9. CC_ERR_KEY_NOT_FOUND
  10. CC_ERR_VALUE_NOT_FOUND
  11. CC_ERR_OUT_OF_RANGE
  12. CC_ITER_END
  13. int cc_common_cmp_str(void* key1, void* key2)
  14. int cc_common_cmp_ptr(void* key1, void* key2)
  15. ctypedef void* (*_mem_alloc_ft)(size_t size)
  16. ctypedef void* (*_mem_calloc_ft)(size_t blocks, size_t size)
  17. ctypedef void (*_mem_free_ft)(void* block)
  18. ctypedef struct Array:
  19. size_t size
  20. size_t capacity
  21. float exp_factor
  22. void** buffer
  23. _mem_alloc_ft* mem_alloc
  24. _mem_calloc_ft* mem_calloc
  25. _mem_free_ft* mem_free
  26. ctypedef struct ArrayConf:
  27. size_t capacity
  28. float exp_factor
  29. #_mem_alloc_ft* mem_alloc
  30. #_mem_calloc_ft* mem_calloc
  31. #_mem_free_ft* mem_free
  32. void *(*mem_alloc) (size_t size)
  33. void *(*mem_calloc) (size_t blocks, size_t size)
  34. void (*mem_free) (void *block)
  35. ctypedef struct ArrayIter:
  36. Array* ar
  37. size_t index
  38. bint last_removed
  39. ctypedef struct ArrayZipIter:
  40. Array* ar1
  41. Array* ar2
  42. size_t index
  43. bint last_removed
  44. cc_stat array_new(Array** out)
  45. cc_stat array_new_conf(ArrayConf* conf, Array** out)
  46. void array_conf_init(ArrayConf* conf)
  47. void array_destroy(Array* ar)
  48. ctypedef void (*_array_destroy_cb_cb_ft)(void*)
  49. void array_destroy_cb(Array* ar, _array_destroy_cb_cb_ft cb)
  50. cc_stat array_add(Array* ar, void* element)
  51. cc_stat array_add_at(Array* ar, void* element, size_t index)
  52. cc_stat array_replace_at(Array* ar, void* element, size_t index, void** out)
  53. cc_stat array_swap_at(Array* ar, size_t index1, size_t index2)
  54. cc_stat array_remove(Array* ar, void* element, void** out)
  55. cc_stat array_remove_at(Array* ar, size_t index, void** out)
  56. cc_stat array_remove_last(Array* ar, void** out)
  57. void array_remove_all(Array* ar)
  58. void array_remove_all_free(Array* ar)
  59. cc_stat array_get_at(Array* ar, size_t index, void** out)
  60. cc_stat array_get_last(Array* ar, void** out)
  61. cc_stat array_subarray(Array* ar, size_t from_, size_t to, Array** out)
  62. cc_stat array_copy_shallow(Array* ar, Array** out)
  63. ctypedef void* (*_array_copy_deep_cp_ft)(void*)
  64. cc_stat array_copy_deep(Array* ar, _array_copy_deep_cp_ft cp, Array** out)
  65. void array_reverse(Array* ar)
  66. cc_stat array_trim_capacity(Array* ar)
  67. size_t array_contains(Array* ar, void* element)
  68. ctypedef int (*_array_contains_value_cmp_ft)(void*, void*)
  69. size_t array_contains_value(Array* ar, void* element, _array_contains_value_cmp_ft cmp)
  70. size_t array_size(Array* ar)
  71. size_t array_capacity(Array* ar)
  72. cc_stat array_index_of(Array* ar, void* element, size_t* index)
  73. ctypedef int (*_array_sort_cmp_ft)(void*, void*)
  74. void array_sort(Array* ar, _array_sort_cmp_ft cmp)
  75. ctypedef void (*_array_map_fn_ft)(void*)
  76. void array_map(Array* ar, _array_map_fn_ft fn)
  77. ctypedef void (*_array_reduce_fn_ft)(void*, void*, void*)
  78. void array_reduce(Array* ar, _array_reduce_fn_ft fn, void* result)
  79. ctypedef bint (*_array_filter_mut_predicate_ft)(void*)
  80. cc_stat array_filter_mut(Array* ar, _array_filter_mut_predicate_ft predicate)
  81. ctypedef bint (*_array_filter_predicate_ft)(void*)
  82. cc_stat array_filter(Array* ar, _array_filter_predicate_ft predicate, Array** out)
  83. void array_iter_init(ArrayIter* iter, Array* ar)
  84. cc_stat array_iter_next(ArrayIter* iter, void** out)
  85. cc_stat array_iter_remove(ArrayIter* iter, void** out)
  86. cc_stat array_iter_add(ArrayIter* iter, void* element)
  87. cc_stat array_iter_replace(ArrayIter* iter, void* element, void** out)
  88. size_t array_iter_index(ArrayIter* iter)
  89. void array_zip_iter_init(ArrayZipIter* iter, Array* a1, Array* a2)
  90. cc_stat array_zip_iter_next(ArrayZipIter* iter, void** out1, void** out2)
  91. cc_stat array_zip_iter_add(ArrayZipIter* iter, void* e1, void* e2)
  92. cc_stat array_zip_iter_remove(ArrayZipIter* iter, void** out1, void** out2)
  93. cc_stat array_zip_iter_replace(ArrayZipIter* iter, void* e1, void* e2, void** out1, void** out2)
  94. size_t array_zip_iter_index(ArrayZipIter* iter)
  95. void** array_get_buffer(Array* ar)
  96. ctypedef struct TableEntry:
  97. void* key
  98. void* value
  99. size_t hash
  100. TableEntry* next
  101. ctypedef size_t (*_hash_ft)(const void* key, int l, uint32_t seed)
  102. ctypedef bint (*_key_compare_ft)(const void* key1, const void* key2)
  103. ctypedef struct HashTable:
  104. size_t capacity
  105. size_t size
  106. size_t threshold
  107. uint32_t hash_seed
  108. int key_len
  109. float load_factor
  110. TableEntry **buckets
  111. size_t (*hash) (const void *key, int l, uint32_t seed)
  112. bint (*key_cmp) (const void *key1, const void *key2)
  113. void *(*mem_alloc) (size_t size)
  114. void *(*mem_calloc) (size_t blocks, size_t size)
  115. void (*mem_free) (void *block)
  116. ctypedef struct HashTableConf:
  117. float load_factor
  118. size_t initial_capacity
  119. int key_length
  120. uint32_t hash_seed
  121. #_hash_ft hash
  122. #_key_compare_ft* key_compare
  123. #_mem_alloc_ft* mem_alloc
  124. #_mem_calloc_ft* mem_calloc
  125. #_mem_free_ft* mem_free
  126. size_t (*hash) (const void *key, int l, uint32_t seed)
  127. bint (*key_compare) (const void *key1, const void *key2)
  128. void *(*mem_alloc) (size_t size)
  129. void *(*mem_calloc) (size_t blocks, size_t size)
  130. void (*mem_free) (void *block)
  131. ctypedef struct HashTableIter:
  132. HashTable* table
  133. size_t bucket_index
  134. TableEntry* prev_entry
  135. TableEntry* next_entry
  136. size_t get_table_index(HashTable *table, void *key)
  137. void hashtable_conf_init(HashTableConf* conf)
  138. cc_stat hashtable_new(HashTable** out)
  139. cc_stat hashtable_new_conf(HashTableConf* conf, HashTable** out)
  140. void hashtable_destroy(HashTable* table)
  141. cc_stat hashtable_add(HashTable* table, void* key, void* val)
  142. cc_stat hashtable_get(HashTable* table, void* key, void** out)
  143. cc_stat hashtable_remove(HashTable* table, void* key, void** out)
  144. void hashtable_remove_all(HashTable* table)
  145. bint hashtable_contains_key(HashTable* table, void* key)
  146. size_t hashtable_size(HashTable* table)
  147. size_t hashtable_capacity(HashTable* table)
  148. cc_stat hashtable_get_keys(HashTable* table, Array** out)
  149. cc_stat hashtable_get_values(HashTable* table, Array** out)
  150. size_t hashtable_hash_string(void* key, int len, uint32_t seed)
  151. size_t hashtable_hash(void* key, int len, uint32_t seed)
  152. size_t hashtable_hash_ptr(void* key, int len, uint32_t seed)
  153. ctypedef void (*_hashtable_foreach_key_op_ft)(void*)
  154. void hashtable_foreach_key(HashTable* table, _hashtable_foreach_key_op_ft op)
  155. ctypedef void (*_hashtable_foreach_value_op_ft)(void*)
  156. void hashtable_foreach_value(HashTable* table, _hashtable_foreach_value_op_ft op)
  157. void hashtable_iter_init(HashTableIter* iter, HashTable* table)
  158. cc_stat hashtable_iter_next(HashTableIter* iter, TableEntry** out)
  159. cc_stat hashtable_iter_remove(HashTableIter* iter, void** out)
  160. ctypedef struct HashSet:
  161. HashTable* table
  162. int* dummy
  163. #_mem_alloc_ft* mem_alloc
  164. #_mem_calloc_ft* mem_calloc
  165. #_mem_free_ft* mem_free
  166. void *(*mem_alloc) (size_t size)
  167. void *(*mem_calloc) (size_t blocks, size_t size)
  168. void (*mem_free) (void *block)
  169. ctypedef HashTableConf HashSetConf
  170. ctypedef struct HashSetIter:
  171. HashTableIter iter
  172. void hashset_conf_init(HashSetConf* conf)
  173. cc_stat hashset_new(HashSet** hs)
  174. cc_stat hashset_new_conf(HashSetConf* conf, HashSet** hs)
  175. void hashset_destroy(HashSet* set)
  176. cc_stat hashset_add(HashSet* set, void* element)
  177. cc_stat hashset_remove(HashSet* set, void* element, void** out)
  178. void hashset_remove_all(HashSet* set)
  179. bint hashset_contains(HashSet* set, void* element)
  180. size_t hashset_size(HashSet* set)
  181. size_t hashset_capacity(HashSet* set)
  182. ctypedef void (*_hashset_foreach_op_ft)(void*)
  183. void hashset_foreach(HashSet* set, _hashset_foreach_op_ft op)
  184. void hashset_iter_init(HashSetIter* iter, HashSet* set)
  185. cc_stat hashset_iter_next(HashSetIter* iter, void** out)
  186. cc_stat hashset_iter_remove(HashSetIter* iter, void** out)