-
Notifications
You must be signed in to change notification settings - Fork 0
/
stlmap.pyx
28 lines (22 loc) · 860 Bytes
/
stlmap.pyx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from libcpp.unordered_map cimport unordered_map
from libcpp.utility cimport pair
from libc.stdint cimport uint64_t, uint32_t
from cython.operator cimport dereference as deref
cdef class MapU64U32:
cdef:
unordered_map[uint64_t, uint32_t] umap
uint32_t get(self, uint64_t key) except *:
cdef unordered_map[uint64_t, uint32_t].iterator it = self.umap.find(key)
if it == self.umap.end():
raise KeyError(key)
else:
return deref(it).second
cpdef void reserve(self, size_t n):
self.umap.reserve(n)
def __setitem__(self, key: uint64_t, value: uint32_t):
self.umap[key] = value
def __getitem__(self, key: uint64_t) -> uint32_t:
return self.get(key)
def __dealloc__(self):
# umap distructor is called automatically
pass