| 15348 | |
| 15349 | # Fast Binary Encoding StructHashEx model |
| 15350 | class StructHashExModel(fbe.Model): |
| 15351 | __slots__ = "_model", |
| 15352 | |
| 15353 | def __init__(self, buffer=None): |
| 15354 | super().__init__(buffer) |
| 15355 | self._model = FieldModelStructHashEx(self.buffer, 4) |
| 15356 | |
| 15357 | @property |
| 15358 | def model(self): |
| 15359 | return self._model |
| 15360 | |
| 15361 | # Get the model size |
| 15362 | @property |
| 15363 | def fbe_size(self): |
| 15364 | return self._model.fbe_size + self._model.fbe_extra |
| 15365 | |
| 15366 | # Get the model type |
| 15367 | @property |
| 15368 | def fbe_type(self): |
| 15369 | return self.TYPE |
| 15370 | |
| 15371 | TYPE = FieldModelStructHashEx.TYPE |
| 15372 | |
| 15373 | # Check if the struct value is valid |
| 15374 | def verify(self): |
| 15375 | if (self.buffer.offset + self._model.fbe_offset - 4) > self.buffer.size: |
| 15376 | return False |
| 15377 | |
| 15378 | fbe_full_size = self.read_uint32(self._model.fbe_offset - 4) |
| 15379 | if fbe_full_size < self._model.fbe_size: |
| 15380 | return False |
| 15381 | |
| 15382 | return self._model.verify() |
| 15383 | |
| 15384 | # Create a new model (begin phase) |
| 15385 | def create_begin(self): |
| 15386 | fbe_begin = self.buffer.allocate(4 + self._model.fbe_size) |
| 15387 | return fbe_begin |
| 15388 | |
| 15389 | # Create a new model (end phase) |
| 15390 | def create_end(self, fbe_begin): |
| 15391 | fbe_end = self.buffer.size |
| 15392 | fbe_full_size = fbe_end - fbe_begin |
| 15393 | self.write_uint32(self._model.fbe_offset - 4, fbe_full_size) |
| 15394 | return fbe_full_size |
| 15395 | |
| 15396 | # Serialize the struct value |
| 15397 | def serialize(self, value): |
| 15398 | fbe_begin = self.create_begin() |
| 15399 | self._model.set(value) |
| 15400 | fbe_full_size = self.create_end(fbe_begin) |
| 15401 | return fbe_full_size |
| 15402 | |
| 15403 | # Deserialize the struct value |
| 15404 | def deserialize(self, value=None): |
| 15405 | if value is None: |
| 15406 | value = StructHashEx() |
| 15407 | |