collections.pxd 7.4 KB

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