Example #1
0
 def _write_field(cls, tokenizer, output_str, descriptor, value):
     if descriptor.type == FieldType.String:
         tokenizer.write_int(output_str, len(value), FieldType.Int32)
         tokenizer.write_str(output_str, value)
     elif descriptor.type >= FieldType.Int8 and descriptor.type <= FieldType.Int64:
         tokenizer.write_int(output_str, value, descriptor.type)
     elif descriptor.type == FieldType.List:
         tokenizer.write_int(output_str, len(value), FieldType.Int32)
         if descriptor.list_item_type != FieldType.Object:
             list_item_descriptor = _FieldDescriptor(None, descriptor.list_item_type)
             for item in value:
                 cls._write_field(tokenizer, output_str, list_item_descriptor, item)
         else:
             for item in value:
                 cls._write_object(tokenizer, output_str, descriptor.list_item_class.get_descriptor(), item)
     elif descriptor.type == FieldType.Object:
         cls._write_object(tokenizer, output_str, descriptor.object_class.get_descriptor(), value)
Example #2
0
 def _read_field(cls, tokenizer, input_str, descriptor):
     if descriptor.type == FieldType.String:
         str_len = tokenizer.read_int(input_str, FieldType.Int32)
         return tokenizer.read_str(input_str, str_len)
     elif descriptor.type >= FieldType.Int8 and descriptor.type <= FieldType.Int64:
         return tokenizer.read_int(input_str, descriptor.type)
     elif descriptor.type == FieldType.List:
         array_len = tokenizer.read_int(input_str, FieldType.Int32)
         array = []
         if descriptor.list_item_class is not None:
             for _ in range(array_len):
                 array.append(cls._read_object(tokenizer, input_str, descriptor.list_item_class))
         else:
             array_item_descriptor = _FieldDescriptor(None, descriptor.list_item_type)
             for _ in range(array_len):
                 array.append(cls._read_field(tokenizer, input_str, array_item_descriptor))
         return array
         
     elif descriptor.type == FieldType.Object:
         return cls._read_object(tokenizer, input_str, descriptor.object_class)