You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
1.1 KiB

4 years ago
  1. from libc.stdint cimport uint64_t
  2. from cymem.cymem cimport Pool
  3. ctypedef uint64_t key_t
  4. cdef struct Cell:
  5. key_t key
  6. void* value
  7. cdef struct MapStruct:
  8. Cell* cells
  9. void* value_for_empty_key
  10. void* value_for_del_key
  11. key_t length
  12. key_t filled
  13. bint is_empty_key_set
  14. bint is_del_key_set
  15. cdef void* map_bulk_get(const MapStruct* map_, const key_t* keys, void** values,
  16. int n) nogil
  17. cdef void* map_get(const MapStruct* map_, const key_t key) nogil
  18. cdef void map_set(Pool mem, MapStruct* map_, key_t key, void* value) except *
  19. cdef void map_init(Pool mem, MapStruct* pmap, size_t length) except *
  20. cdef bint map_iter(const MapStruct* map_, int* i, key_t* key, void** value) nogil
  21. cdef class PreshMap:
  22. cdef MapStruct* c_map
  23. cdef Pool mem
  24. cdef inline void* get(self, key_t key) nogil
  25. cdef void set(self, key_t key, void* value) except *
  26. cdef class PreshMapArray:
  27. cdef Pool mem
  28. cdef MapStruct* maps
  29. cdef size_t length
  30. cdef inline void* get(self, size_t i, key_t key) nogil
  31. cdef void set(self, size_t i, key_t key, void* value) except *