internal static T GetField <T>(Triple_Accessor accessor, string fieldName, int field_name_idx) { 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_Triple.TryGetValue(member_name_string, out member_id)) { Throw.undefined_field(); } switch (member_id) { case 0: return(GenericFieldAccessor.GetField <T>(accessor.SubjectNode, fieldName, field_divider_idx + 1)); case 1: return(GenericFieldAccessor.GetField <T>(accessor.PredicateNode, fieldName, field_divider_idx + 1)); case 2: return(GenericFieldAccessor.GetField <T>(accessor.ObjectNode, fieldName, field_divider_idx + 1)); default: Throw.member_access_on_non_struct__field(member_name_string); break; } } fieldName = fieldName.Substring(field_name_idx); if (!FieldLookupTable_Triple.TryGetValue(fieldName, out member_id)) { Throw.undefined_field(); } switch (member_id) { case 0: return(TypeConverter <T> .ConvertFrom_INode(accessor.SubjectNode)); break; case 1: return(TypeConverter <T> .ConvertFrom_INode(accessor.PredicateNode)); break; case 2: return(TypeConverter <T> .ConvertFrom_INode(accessor.ObjectNode)); break; case 3: return(TypeConverter <T> .ConvertFrom_string(accessor.Url)); break; case 4: return(TypeConverter <T> .ConvertFrom_long(accessor.GraphInstance)); break; case 5: return(TypeConverter <T> .ConvertFrom_long(accessor.HashCode)); break; case 6: return(TypeConverter <T> .ConvertFrom_List_INode(accessor.Nodes)); break; } /* Should not reach here */ throw new Exception("Internal error T5008"); }
internal static void SetField <T>(Triple_Accessor 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_Triple.TryGetValue(member_name_string, out member_id)) { Throw.undefined_field(); } switch (member_id) { case 0: GenericFieldAccessor.SetField(accessor.SubjectNode, fieldName, field_divider_idx + 1, value); break; case 1: GenericFieldAccessor.SetField(accessor.PredicateNode, fieldName, field_divider_idx + 1, value); break; case 2: GenericFieldAccessor.SetField(accessor.ObjectNode, fieldName, field_divider_idx + 1, value); break; default: Throw.member_access_on_non_struct__field(member_name_string); break; } return; } fieldName = fieldName.Substring(field_name_idx); if (!FieldLookupTable_Triple.TryGetValue(fieldName, out member_id)) { Throw.undefined_field(); } switch (member_id) { case 0: { INode conversion_result = TypeConverter <T> .ConvertTo_INode(value); { accessor.SubjectNode = conversion_result; } break; } case 1: { INode conversion_result = TypeConverter <T> .ConvertTo_INode(value); { accessor.PredicateNode = conversion_result; } break; } case 2: { INode conversion_result = TypeConverter <T> .ConvertTo_INode(value); { accessor.ObjectNode = conversion_result; } break; } case 3: { string conversion_result = TypeConverter <T> .ConvertTo_string(value); { accessor.Url = conversion_result; } break; } case 4: { long conversion_result = TypeConverter <T> .ConvertTo_long(value); { accessor.GraphInstance = conversion_result; } break; } case 5: { long conversion_result = TypeConverter <T> .ConvertTo_long(value); { accessor.HashCode = conversion_result; } break; } case 6: { List <INode> conversion_result = TypeConverter <T> .ConvertTo_List_INode(value); { accessor.Nodes = conversion_result; } break; } } }