@@ -106,18 +106,18 @@ cdef class HashTable:
106106 def __len__(self ) -> int:
107107 return self.used
108108
109- cdef int _get_index(self , uint8_t* key ):
109+ cdef size_t _get_index(self , uint8_t* key ):
110110 """ key must be perfectly random distributed bytes, so we don't need a hash function here."""
111111 cdef uint32_t key32 = (key[0 ] << 24 ) | (key[1 ] << 16 ) | (key[2 ] << 8 ) | key[3 ]
112112 return key32 % self .capacity
113113
114- cdef int _lookup_index(self , uint8_t* key_ptr, int * index_ptr):
114+ cdef int _lookup_index(self , uint8_t* key_ptr, size_t * index_ptr):
115115 """
116116 search for a specific key.
117117 if found, return 1 and set *index_ptr to the index of the bucket in self.table.
118118 if not found, return 0 and set *index_ptr to the index of a free bucket in self.table.
119119 """
120- cdef int index = self ._get_index(key_ptr)
120+ cdef size_t index = self ._get_index(key_ptr)
121121 cdef uint32_t kv_index
122122 self .stats_lookup += 1
123123 while (kv_index := self .table[index]) != FREE_BUCKET:
@@ -138,7 +138,7 @@ cdef class HashTable:
138138 cdef uint8_t* key_ptr = < uint8_t* > key
139139 cdef uint8_t* value_ptr = < uint8_t* > value
140140 cdef uint32_t kv_index
141- cdef int index
141+ cdef size_t index
142142 self.stats_set += 1
143143 if self._lookup_index(key_ptr , &index ):
144144 kv_index = self .table[index]
@@ -173,7 +173,7 @@ cdef class HashTable:
173173 if len(key ) != self.ksize:
174174 raise ValueError("Key size does not match the defined size")
175175 cdef uint32_t kv_index
176- cdef int index
176+ cdef size_t index
177177 self.stats_get += 1
178178 if self._lookup_index(<uint8_t*> key , &index ):
179179 kv_index = self .table[index]
@@ -185,7 +185,7 @@ cdef class HashTable:
185185 if len(key ) != self.ksize:
186186 raise ValueError("Key size does not match the defined size")
187187 cdef uint8_t* key_ptr = < uint8_t* > key
188- cdef int index
188+ cdef size_t index
189189 cdef uint32_t kv_index
190190
191191 self.stats_del += 1
@@ -227,7 +227,7 @@ cdef class HashTable:
227227 return value
228228
229229 def items(self ) -> Iterator[tuple[bytes , bytes]]:
230- cdef int i
230+ cdef size_t i
231231 cdef uint32_t kv_index
232232 self.stats_iter += 1
233233 for i in range(self.capacity ):
@@ -237,8 +237,8 @@ cdef class HashTable:
237237 value = self .values[kv_index * self .vsize:(kv_index + 1 ) * self .vsize]
238238 yield key, value
239239
240- cdef void _resize_table(self , int new_capacity):
241- cdef int i, index
240+ cdef void _resize_table(self , size_t new_capacity):
241+ cdef size_t i, index
242242 cdef uint32_t kv_index
243243 cdef uint32_t* new_table = < uint32_t* > malloc(new_capacity * sizeof(uint32_t))
244244 for i in range (new_capacity):
@@ -259,13 +259,13 @@ cdef class HashTable:
259259 self .table = new_table
260260 self .tombstones = 0
261261
262- cdef void _resize_kv(self , int new_capacity):
262+ cdef void _resize_kv(self , size_t new_capacity):
263263 # We must never use kv indexes >= RESERVED, thus we'll never need more capacity either.
264- cdef int capacity = min (new_capacity, RESERVED - 1 )
264+ cdef size_t capacity = min (new_capacity, < size_t > RESERVED - 1 )
265265 self .stats_resize_kv += 1
266266 self .keys = < uint8_t* > realloc(self .keys, capacity * self .ksize * sizeof(uint8_t))
267267 self .values = < uint8_t* > realloc(self .values, capacity * self .vsize * sizeof(uint8_t))
268- self .kv_capacity = capacity
268+ self .kv_capacity = < uint32_t > capacity
269269
270270 def k_to_idx (self , key: bytes ) -> int:
271271 """
@@ -274,7 +274,7 @@ cdef class HashTable:
274274 """
275275 if len(key ) != self.ksize:
276276 raise ValueError("Key size does not match the defined size")
277- cdef int index
277+ cdef size_t index
278278 if self._lookup_index(<uint8_t*> key , &index ):
279279 return self .table[index] # == uint32_t kv_index
280280 else :
@@ -297,7 +297,7 @@ cdef class HashTable:
297297 raise ValueError("Key size does not match the defined size")
298298 if len(value ) != self.vsize:
299299 raise ValueError("Value size does not match the defined size")
300- cdef int index
300+ cdef size_t index
301301 cdef uint32_t kv_index
302302 if self._lookup_index(<uint8_t*> key , &index ):
303303 kv_index = self .table[index]
0 commit comments