| @@ 16-41 (lines=26) @@ | ||
| 13 | The length StarStruct element class. |
|
| 14 | """ |
|
| 15 | ||
| 16 | def __init__(self, field, mode=Mode.Native, alignment=1): |
|
| 17 | """Initialize a StarStruct element object.""" |
|
| 18 | ||
| 19 | # All of the type checks have already been performed by the class |
|
| 20 | # factory |
|
| 21 | if isinstance(field[0], str): |
|
| 22 | self.name = field[0] |
|
| 23 | self.object_length = True |
|
| 24 | elif isinstance(field[0], bytes): |
|
| 25 | self.name = field[0].decode('utf-8') |
|
| 26 | self.object_length = False |
|
| 27 | ||
| 28 | self.ref = field[2] |
|
| 29 | ||
| 30 | self._mode = mode |
|
| 31 | self._alignment = alignment |
|
| 32 | ||
| 33 | # Validate that the format specifiers are valid struct formats, this |
|
| 34 | # doesn't have to be done now because the format will be checked when |
|
| 35 | # any struct functions are called, but it's better to inform the user of |
|
| 36 | # any errors earlier. |
|
| 37 | # The easiest way to perform this check is to create a "Struct" class |
|
| 38 | # instance, this will also increase the efficiency of all struct related |
|
| 39 | # functions called. |
|
| 40 | self.format = mode.value + field[1] |
|
| 41 | self._struct = struct.Struct(self.format) |
|
| 42 | ||
| 43 | @staticmethod |
|
| 44 | def valid(field): |
|
| @@ 95-117 (lines=23) @@ | ||
| 92 | packed_struct = example_struct.make(my_data) |
|
| 93 | ||
| 94 | """ |
|
| 95 | ||
| 96 | def __init__(self, field, mode=Mode.Native, alignment=1): |
|
| 97 | """Initialize a StarStruct element object.""" |
|
| 98 | ||
| 99 | # TODO: Add checks in the class factory? |
|
| 100 | self.name = field[0] |
|
| 101 | ||
| 102 | # the ref attribute is required, but this element doesn't quite have |
|
| 103 | # one, instead use the ref field to hold the fixed point format |
|
| 104 | # attributes |
|
| 105 | self.ref = {} |
|
| 106 | ||
| 107 | self.ref['precision'] = field[3] |
|
| 108 | ||
| 109 | if len(field) == 5: |
|
| 110 | self.ref['decimal_prec'] = field[4] |
|
| 111 | else: |
|
| 112 | self.ref['decimal_prec'] = None |
|
| 113 | ||
| 114 | self._mode = mode |
|
| 115 | self._alignment = alignment |
|
| 116 | ||
| 117 | self.format = mode.value + field[2] |
|
| 118 | self._struct = struct.Struct(self.format) |
|
| 119 | ||
| 120 | @staticmethod |
|