def gen_array_helper_codes_for_field(f): field_type = util.gen_global_type_name_from_field(f) return (sol_constants.ARRAY_HELPER_CODE).format( name=util.to_camel_case(f.name), val_name="self.{0}".format(f.name), field_type=field_type, field_storage_type="memory" if util.is_complex_type(field_type) else "")
def gen_map_helper_codes_for_field(f, nested_type): kf = nested_type.field[0] vf = nested_type.field[1] return (""" //map helpers for {name} function get_{name}(Data storage self, {key_type} key) internal view returns ({value_type} {storage_type}) {{ return {val_name}[{map_name}[key] - 1].value; }} function search_{name}(Data storage self, {key_type} key) internal view returns (bool, {value_type} {storage_type}) {{ if ({map_name}[key] <= 0) {{ return (false, {val_name}[0].value); }} return (true, {val_name}[{map_name}[key] - 1].value); }} function add_{name}(Data storage self, {key_type} key, {value_type} value) internal {{ if ({map_name}[key] != 0) {{ {copy_value_exists} }} else {{ {val_name}.length++; {val_name}[{val_name}.length - 1].key = key; {copy_value_new} {map_name}[key] = {val_name}.length; }} }} function rm_{name}(Data storage self, {key_type} key) internal {{ uint pos = {map_name}[key]; if (pos == 0) {{ return; }} {val_name}[pos - 1] = {val_name}[{val_name}.length - 1]; {val_name}.length--; delete {map_name}[key]; }} """ ).format( name = f.name, val_name="self.{0}".format(f.name), map_name = "self._{0}_map".format(f.name), key_type=util.gen_global_type_name_from_field(kf), value_type=util.gen_global_type_name_from_field(vf), storage_type="storage" if (util.field_is_repeated(vf) or util.field_is_message(vf)) else "", container_type=util.gen_global_type_name_from_field(f), copy_value_exists=gen_value_copy_code(vf, ("self.{0}[self._{0}_map[key] - 1]").format(f.name)), copy_value_new=gen_value_copy_code(vf, ("self.{0}[self.{0}.length - 1]").format(f.name)), );
def gen_map_helper_codes_for_field(f, nested_type): kf = nested_type.field[0] vf = nested_type.field[1] key_type = util.gen_global_type_name_from_field(kf) value_type = util.gen_global_type_name_from_field(vf) field_type = util.gen_global_type_name_from_field(f) if util.is_complex_type(value_type): value_storage_type = "memory" else: value_storage_type = "" return (sol_constants.MAP_HELPER_CODE).format( name=util.to_camel_case(f.name), val_name="self.{0}".format(f.name), map_name="self._size_{0}".format(f.name), key_type=key_type, value_type=value_type, field_type=field_type, value_storage_type=value_storage_type, key_storage_type="memory" if util.is_complex_type(key_type) else "", container_type=util.gen_global_type_name_from_field(f))
def gen_struct_decoder(f, msg, parent_struct_name): return ( " function {name}(uint p, bytes bs) \n" " internal pure returns ({struct}, uint) {{ \n" " (uint sz, uint bytesRead) = _pb._decode_varint(p, bs); \n" " p += bytesRead; \n" " ({decode_type} r,) = {lib}._decode(p, bs, sz); \n" " return (r, sz + bytesRead); \n" " }} \n").format( struct=util.gen_global_type_name_from_field(f), decode_type=util.gen_global_type_decl_from_field(f), name=util.gen_struct_decoder_name_from_field(f), lib=util.gen_struct_codec_lib_name_from_field(f))
def gen_struct_decoder(f, msg, parent_struct_name): return (decoder_constants.STRUCT_DECORDER).format( struct=util.gen_global_type_name_from_field(f), decode_type=util.gen_global_type_decl_from_field(f), name=util.gen_struct_decoder_name_from_field(f), lib=util.gen_struct_codec_lib_name_from_field(f))
def gen_map_fields_decl_for_field(f, nested_type): return (" mapping({key_type} => uint) _{name}_map;").format( name=f.name, key_type=util.gen_global_type_name_from_field(nested_type.field[0]), container_type=util.gen_global_type_name_from_field(f) );
def gen_map_fields_decl_for_field(f, nested_type): return (sol_constants.MAP_FIELD_DEFINITION).format( name=f.name, key_type=util.gen_global_type_name_from_field(nested_type.field[0]), container_type=util.gen_global_type_name_from_field(f))