internal static void SetField <T>(t_field_type accessor, string fieldName, int field_name_idx, T value) { uint member_id; int field_divider_idx = fieldName.IndexOf('.', field_name_idx); if (-1 != field_divider_idx) { string member_name_string = fieldName.Substring(field_name_idx, field_divider_idx - field_name_idx); if (!FieldLookupTable_t_field_name.TryGetValue(member_name_string, out member_id)) { Throw.undefined_field(); } switch (member_id) { /*FOREACH*/ /*USE_LIST("t_member")*/ /* IF("$t_member_type->is_struct()")*/ case t_uint: GenericFieldAccessor.SetField(accessor.t_member_name, fieldName, field_divider_idx + 1, value); break; /* END*/ /*END*/ default: // @note We cannot go further unless it's a struct. // Throw exception now. Throw.member_access_on_non_struct__field(member_name_string); break; } return; } fieldName = fieldName.Substring(field_name_idx); if (!FieldLookupTable_t_field_name.TryGetValue(fieldName, out member_id)) { Throw.undefined_field(); } switch (member_id) { /*FOREACH*/ /*USE_LIST("t_member")*/ case t_uint: { t_field_type_2 conversion_result = TypeConverter <T> .ConvertTo_t_field_type_2_display(value); MODULE_CALL("ValueToAccessorFieldAssignment", "$t_member", "\"accessor\"", "\"conversion_result\""); break; } /*END*/ } }
internal static unsafe bool TryParse_t_field_type_2_display(t_field_type value, out t_field_type_2 intermediate_result) { throw new NotImplementedException(); }
/// <summary> /// ONLY VALID FOR TC_CONVERTLIST AND TC_ARRAYTOLIST. /// </summary> IEnumerable <t_field_type> ITypeConverter <t_field_type_2> .Enumerate_t_field_type_display(t_field_type_2 value) { //META_VAR("TypeConversionAction", "action", "$t_field_type->get_type_conversion_action($t_field_type_2)"); IF("$t_field_type_2->is_list() && $t_field_type->is_convertible_from($t_field_type_2->listElementType)"); foreach (var element in value) { yield return(TypeConverter <t_field_type> .ConvertFrom_t_field_type_2_element_type_display(element)); } ELIF("$t_field_type_2->is_array() && $t_field_type->is_convertible_from($t_field_type_2->arrayInfo.arrayElement)"); { MUTE(); int t_array_iterator_length = 1; MUTE_END(); MAP_VAR("t_field_type_2_array_element_type_display", "Trinity::Codegen::GetDataTypeDisplayString($$->arrayInfo.arrayElement)", MemberOf = "t_field_type_2"); MAP_LIST("t_array_iterator_list", "arrayInfo.array_dimension_size", MemberOf = "t_field_type_2"); MAP_VAR("t_array_iterator_prefix", "Trinity::Codegen::GetDataTypeDisplayString($$->arrayInfo.arrayElement)", MemberOf = "t_field_type_2"); MAP_VAR("t_array_iterator_length", "", MemberOf = "t_array_iterator_list"); MAP_VAR("t_array_iterator_string", "t_array_iterator_prefix + '_' + GetString(GET_ITERATOR_VALUE()) + Discard($$)", MemberOf = "t_array_iterator_list"); FOREACH(); for (int t_array_iterator_string = 0; t_array_iterator_string < t_array_iterator_length; ++t_array_iterator_string) /*END*/ { IF("$t_field_type->is_assignable_from($t_field_type_2->arrayInfo.arrayElement)"); yield return(value[/*FOREACH(",")*/ t_array_iterator_string /*END*/]); ELSE(); yield return(TypeConverter <t_field_type> .ConvertFrom_t_field_type_2_array_element_type_display(value[/*FOREACH(",")*/ t_array_iterator_string /*END*/])); END(); } } END(); yield break; }
t_field_type ITypeConverter <t_field_type_2> .ConvertTo_t_field_type_display(t_field_type_2 value) { return(TypeConverter <t_field_type> .ConvertFrom_t_field_type_2_display(value)); }
t_field_type_2 ITypeConverter <t_field_type_2> .ConvertFrom_t_field_type_display(t_field_type value) { META_VAR("TypeConversionAction", "conversion_action", "$t_field_type_2->get_type_conversion_action($t_field_type)"); IF("%conversion_action == TypeConversionAction::TC_ASSIGN"); return((t_field_type_2)value); ELIF("%conversion_action == TypeConversionAction::TC_TOSTRING"); return(Serializer.ToString(value)); ELIF("%conversion_action == TypeConversionAction::TC_PARSESTRING"); { #region String parse t_field_type_2 intermediate_result; bool conversion_success; IF("data_type_need_external_parser($t_field_type_2)"); { conversion_success = ExternalParser.TryParse_t_field_type_2_display(value, out intermediate_result); } ELSE(); { conversion_success = t_field_type_2.TryParse(value, out intermediate_result); } END(); if (!conversion_success) { IF("$t_field_type_2->is_list()"); try { t_field_type_2_element_type element = TypeConverter <t_field_type_2_element_type> .ConvertFrom_t_field_type_display(value); intermediate_result = new t_field_type_2(); intermediate_result.Add(element); } catch { throw new ArgumentException("Cannot parse \"" + value + "\" into either 't_field_type_2' or 't_field_type_2_element_type'."); } ELSE(); Throw.cannot_parse(value, "t_field_type_2"); END(); } return(intermediate_result); #endregion } ELIF("%conversion_action == TypeConversionAction::TC_TOBOOL"); return(value != 0); ELIF("%conversion_action == TypeConversionAction::TC_CONVERTLIST"); { t_field_type_2 intermediate_result = new t_field_type_2(); foreach (var element in value) { intermediate_result.Add(TypeConverter <t_field_type_2_element_type> .ConvertFrom_t_field_type_element_type_display(element)); } return(intermediate_result); } ELIF("%conversion_action == TypeConversionAction::TC_WRAPINLIST"); { t_field_type_2 intermediate_result = new t_field_type_2(); intermediate_result.Add(TypeConverter <t_field_type_2_element_type> .ConvertFrom_t_field_type_display(value)); return(intermediate_result); } ELIF("%conversion_action == TypeConversionAction::TC_ARRAYTOLIST"); return(TypeConverter <t_field_type> .Enumerate_t_field_type_2_element_type_display(value).ToList()); ELIF("%conversion_action == TypeConversionAction::TC_EXTRACTNULLABLE"); return(TypeConverter <t_field_type_2> .ConvertFrom_t_field_type_remove_nullable(value.Value)); ELSE(); throw new InvalidCastException("Invalid cast from '[META_OUTPUT($t_field_type)]' to '[META_OUTPUT($t_field_type_2)]'."); END(); }