Esempio n. 1
0
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 "")
Esempio n. 2
0
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)),
    );
Esempio n. 3
0
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))
Esempio n. 4
0
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))
Esempio n. 6
0
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)
    );
Esempio n. 7
0
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))