| 138 | self._small_encoded_meta_strings = {} |
| 139 | |
| 140 | def read_encoded_meta_string(self, buffer): |
| 141 | header = buffer.read_var_uint32() |
| 142 | length = header >> 1 |
| 143 | if (header & 0b1) != 0: |
| 144 | if length <= 0: |
| 145 | raise ValueError("Invalid dynamic metastring id 0") |
| 146 | if length > len(self._dynamic_id_to_encoded_meta_strings): |
| 147 | raise ValueError(f"Invalid dynamic metastring id {length}") |
| 148 | return self._dynamic_id_to_encoded_meta_strings[length - 1] |
| 149 | if length <= SMALL_STRING_THRESHOLD: |
| 150 | encoded_meta_string = self._read_small_meta_string(buffer, length) |
| 151 | else: |
| 152 | encoded_meta_string = self._read_big_meta_string(buffer, length) |
| 153 | self._dynamic_id_to_encoded_meta_strings.append(encoded_meta_string) |
| 154 | return encoded_meta_string |
| 155 | |
| 156 | def _read_small_meta_string(self, buffer, length: int): |
| 157 | if length == 0: |