@@ -392,9 +392,8 @@ cdef class {{name}}HashTable(HashTable):
392
392
393
393
def __cinit__(self, int64_t size_hint=1):
394
394
self.table = kh_init_{{dtype}}()
395
- if size_hint is not None:
396
- size_hint = min(size_hint, SIZE_HINT_LIMIT)
397
- kh_resize_{{dtype}}(self.table, size_hint)
395
+ size_hint = min(kh_needed_n_buckets(size_hint), SIZE_HINT_LIMIT)
396
+ kh_resize_{{dtype}}(self.table, size_hint)
398
397
399
398
def __len__(self) -> int:
400
399
return self.table.size
@@ -420,6 +419,15 @@ cdef class {{name}}HashTable(HashTable):
420
419
sizeof(Py_ssize_t)) # vals
421
420
return overhead + for_flags + for_pairs
422
421
422
+ def get_state(self):
423
+ """ returns infos about the state of the hashtable"""
424
+ return {
425
+ 'n_buckets' : self.table.n_buckets,
426
+ 'size' : self.table.size,
427
+ 'n_occupied' : self.table.n_occupied,
428
+ 'upper_bound' : self.table.upper_bound,
429
+ }
430
+
423
431
cpdef get_item(self, {{dtype}}_t val):
424
432
cdef:
425
433
khiter_t k
@@ -731,9 +739,8 @@ cdef class StringHashTable(HashTable):
731
739
732
740
def __init__(self, int64_t size_hint=1):
733
741
self.table = kh_init_str()
734
- if size_hint is not None:
735
- size_hint = min(size_hint, SIZE_HINT_LIMIT)
736
- kh_resize_str(self.table, size_hint)
742
+ size_hint = min(kh_needed_n_buckets(size_hint), SIZE_HINT_LIMIT)
743
+ kh_resize_str(self.table, size_hint)
737
744
738
745
def __dealloc__(self):
739
746
if self.table is not NULL:
@@ -747,6 +754,15 @@ cdef class StringHashTable(HashTable):
747
754
sizeof(Py_ssize_t)) # vals
748
755
return overhead + for_flags + for_pairs
749
756
757
+ def get_state(self):
758
+ """ returns infos about the state of the hashtable"""
759
+ return {
760
+ 'n_buckets' : self.table.n_buckets,
761
+ 'size' : self.table.size,
762
+ 'n_occupied' : self.table.n_occupied,
763
+ 'upper_bound' : self.table.upper_bound,
764
+ }
765
+
750
766
cpdef get_item(self, str val):
751
767
cdef:
752
768
khiter_t k
@@ -1044,9 +1060,8 @@ cdef class PyObjectHashTable(HashTable):
1044
1060
1045
1061
def __init__(self, int64_t size_hint=1):
1046
1062
self.table = kh_init_pymap()
1047
- if size_hint is not None:
1048
- size_hint = min(size_hint, SIZE_HINT_LIMIT)
1049
- kh_resize_pymap(self.table, size_hint)
1063
+ size_hint = min(kh_needed_n_buckets(size_hint), SIZE_HINT_LIMIT)
1064
+ kh_resize_pymap(self.table, size_hint)
1050
1065
1051
1066
def __dealloc__(self):
1052
1067
if self.table is not NULL:
@@ -1072,6 +1087,18 @@ cdef class PyObjectHashTable(HashTable):
1072
1087
sizeof(Py_ssize_t)) # vals
1073
1088
return overhead + for_flags + for_pairs
1074
1089
1090
+ def get_state(self):
1091
+ """
1092
+ returns infos about the current state of the hashtable like size,
1093
+ number of buckets and so on.
1094
+ """
1095
+ return {
1096
+ 'n_buckets' : self.table.n_buckets,
1097
+ 'size' : self.table.size,
1098
+ 'n_occupied' : self.table.n_occupied,
1099
+ 'upper_bound' : self.table.upper_bound,
1100
+ }
1101
+
1075
1102
cpdef get_item(self, object val):
1076
1103
cdef:
1077
1104
khiter_t k
0 commit comments