Skip to content

Commit fa2cf4a

Browse files
Merge pull request #22 from borgbackup/struct-optimize
struct: only parse value_format once
2 parents ddc0e85 + e411674 commit fa2cf4a

File tree

2 files changed

+6
-6
lines changed

2 files changed

+6
-6
lines changed

borghash.pxd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ cdef class HashTable:
2020

2121
cdef class HashTableNT:
2222
cdef int key_size
23-
cdef str value_format
2423
cdef object value_type
24+
cdef object value_struct
2525
cdef int value_size
2626
cdef HashTable inner

borghash.pyx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -348,8 +348,8 @@ cdef class HashTableNT:
348348
if value_type is None:
349349
raise ValueError("value_type must be specified (a namedtuple type corresponding to value_format).")
350350
self.key_size = key_size
351-
self.value_format = value_format
352-
self.value_size = struct.calcsize(self.value_format)
351+
self.value_struct = struct.Struct(value_format)
352+
self.value_size = self.value_struct.size
353353
self.value_type = value_type
354354
self.inner = HashTable(key_size=self.key_size, value_size=self.value_size, capacity=capacity)
355355
_fill(self, items)
@@ -369,10 +369,10 @@ cdef class HashTableNT:
369369
value = self.value_type(*value)
370370
else:
371371
raise TypeError(f"Expected an instance of {self.value_type}, got {type(value)}")
372-
return struct.pack(self.value_format, *value)
372+
return self.value_struct.pack(*value)
373373

374374
def _to_namedtuple_value(self, binary_value: bytes) -> Any:
375-
unpacked_data = struct.unpack(self.value_format, binary_value)
375+
unpacked_data = self.value_struct.unpack(binary_value)
376376
return self.value_type(*unpacked_data)
377377

378378
def _set_raw(self, key: bytes, value: bytes) -> None:
@@ -460,7 +460,7 @@ cdef class HashTableNT:
460460
meta = {
461461
'key_size': self.key_size,
462462
'value_size': self.value_size,
463-
'value_format': self.value_format,
463+
'value_format': self.value_struct.format,
464464
'value_type_name': self.value_type.__name__,
465465
'value_type_fields': self.value_type._fields,
466466
'capacity': self.inner.capacity,

0 commit comments

Comments
 (0)