60 lines
1.3 KiB
Cython
60 lines
1.3 KiB
Cython
from libc.stdint cimport uint64_t
|
|
from cymem.cymem cimport Pool
|
|
|
|
|
|
ctypedef uint64_t key_t
|
|
|
|
|
|
cdef struct Cell:
|
|
key_t key
|
|
void* value
|
|
|
|
|
|
cdef struct Result:
|
|
int found
|
|
void* value
|
|
|
|
|
|
cdef struct MapStruct:
|
|
Cell* cells
|
|
void* value_for_empty_key
|
|
void* value_for_del_key
|
|
key_t length
|
|
key_t filled
|
|
bint is_empty_key_set
|
|
bint is_del_key_set
|
|
|
|
|
|
cdef void* map_bulk_get(const MapStruct* map_, const key_t* keys, void** values,
|
|
int n) nogil
|
|
|
|
|
|
cdef Result map_get_unless_missing(const MapStruct* map_, const key_t key) nogil
|
|
|
|
cdef void* map_get(const MapStruct* map_, const key_t key) nogil
|
|
|
|
cdef void map_set(Pool mem, MapStruct* map_, key_t key, void* value) except *
|
|
|
|
cdef void map_init(Pool mem, MapStruct* pmap, size_t length) except *
|
|
|
|
cdef bint map_iter(const MapStruct* map_, int* i, key_t* key, void** value) nogil
|
|
|
|
cdef void* map_clear(MapStruct* map_, const key_t key) nogil
|
|
|
|
|
|
cdef class PreshMap:
|
|
cdef MapStruct* c_map
|
|
cdef Pool mem
|
|
|
|
cdef inline void* get(self, key_t key) nogil
|
|
cdef void set(self, key_t key, void* value) except *
|
|
|
|
|
|
cdef class PreshMapArray:
|
|
cdef Pool mem
|
|
cdef MapStruct* maps
|
|
cdef size_t length
|
|
|
|
cdef inline void* get(self, size_t i, key_t key) nogil
|
|
cdef void set(self, size_t i, key_t key, void* value) except *
|