collections.pxd 9.2 KB

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