calg.pxd 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. cdef extern from 'set.h':
  2. #ctypedef _Set Set
  3. #ctypedef _SetEntry SetEntry
  4. ctypedef void *SetValue
  5. ctypedef unsigned int (*SetHashFunc)(SetValue value)
  6. ctypedef bint (*SetEqualFunc)(SetValue value1, SetValue value2)
  7. ctypedef void (*SetFreeFunc)(SetValue value)
  8. ctypedef struct SetEntry:
  9. SetValue data
  10. SetEntry *next
  11. ctypedef struct _Set:
  12. SetEntry **table
  13. unsigned int entries
  14. unsigned int table_size
  15. unsigned int prime_index
  16. SetHashFunc hash_func
  17. SetEqualFunc equal_func
  18. SetFreeFunc free_func
  19. ctypedef _Set Set
  20. ctypedef struct SetIterator:
  21. pass
  22. Set *set_new(SetHashFunc hash_func, SetEqualFunc equal_func)
  23. void set_free(Set *set)
  24. # TODO This should return an int, ideally. See
  25. # https://github.com/fragglet/c-algorithms/issues/20
  26. bint set_insert(Set *set, SetValue data)
  27. bint set_insert_or_assign(Set *set, SetValue *data)
  28. bint set_query(Set *set, SetValue data)
  29. bint set_enlarge(Set *set)
  30. unsigned int set_num_entries(Set *set)
  31. SetValue *set_to_array(Set *set)
  32. Set *set_union(Set *set1, Set *set2)
  33. Set *set_intersection(Set *set1, Set *set2)
  34. void set_iterate(Set *set, SetIterator *iter)
  35. bint set_iter_has_more(SetIterator *iterator)
  36. SetValue set_iter_next(SetIterator *iterator)
  37. cdef extern from 'hash-table.h':
  38. ctypedef void *HashTableKey
  39. ctypedef void *HashTableValue
  40. ctypedef struct HashTablePair:
  41. HashTableKey key
  42. HashTableKey value
  43. ctypedef struct HashTableEntry:
  44. HashTablePair pair
  45. HashTableEntry *next
  46. ctypedef struct HashTable:
  47. HashTableEntry **table
  48. unsigned int table_size
  49. unsigned int entries
  50. unsigned int prime_index
  51. ctypedef struct HashTableIterator:
  52. pass
  53. ctypedef unsigned int (*HashTableHashFunc)(HashTableKey value)
  54. ctypedef bint (*HashTableEqualFunc)(
  55. HashTableKey value1, HashTableKey value2)
  56. ctypedef void (*HashTableKeyFreeFunc)(HashTableKey value)
  57. ctypedef void (*HashTableValueFreeFunc)(HashTableValue value)
  58. HashTable *hash_table_new(
  59. HashTableHashFunc hash_func, HashTableEqualFunc equal_func)
  60. void hash_table_free(HashTable *hash_table)
  61. void hash_table_register_free_functions(
  62. HashTable *hash_table, HashTableKeyFreeFunc key_free_func,
  63. HashTableValueFreeFunc value_free_func)
  64. int hash_table_insert(
  65. HashTable *hash_table, HashTableKey key, HashTableValue value)
  66. HashTableValue hash_table_lookup(
  67. HashTable *hash_table, HashTableKey key)
  68. bint hash_table_remove(HashTable *hash_table, HashTableKey key)
  69. unsigned int hash_table_num_entries(HashTable *hash_table)
  70. void hash_table_iterate(HashTable *hash_table, HashTableIterator *iter)
  71. bint hash_table_iter_has_more(HashTableIterator *iterator)
  72. HashTablePair hash_table_iter_next(HashTableIterator *iterator)