internal protected override bool TryCreate(MetaElementType elementType, out ReadElement element) { switch (elementType) { case MetaElementType.Field: FieldReadElement fieldReadElement = new FieldReadElement(); fieldList.Add(fieldReadElement); element = fieldReadElement; return(true); case MetaElementType.Sequence: SequenceReadElement sequenceReadElement = new SequenceReadElement(); sequenceList.Add(sequenceReadElement); element = sequenceReadElement; return(true); case MetaElementType.Substitution: SubstitutionReadElement substitutionReadElement = new SubstitutionReadElement(); substitutionList.Add(substitutionReadElement); element = substitutionReadElement; return(true); default: element = null; return(false); } }
protected virtual bool ResolveFields(FtMeta meta, out string errorDescription) { FieldSorter.Rec[] sorterRecArray = new FieldSorter.Rec[fieldList.Count]; FieldReadElement[] sortedElements; for (int i = 0; i < fieldList.Count; i++) { FieldReadElement element = fieldList[i]; sorterRecArray[i].Target = element; sorterRecArray[i].Implicit = i; sorterRecArray[i].Explicit = element.ExplicitIndex; } int duplicateExplicitIndex; if (!FieldSorter.TrySort(sorterRecArray, out sortedElements, out duplicateExplicitIndex)) { errorDescription = string.Format(Properties.Resources.FieldedTextReadElement_ResolveFields_DuplicateExplicitIndexInFields, duplicateExplicitIndex); return(false); } else { errorDescription = ""; bool result = true; for (int i = 0; i < sortedElements.Length; i++) { FieldReadElement element = sortedElements[i]; FtMetaField field = meta.FieldList.New(element.DataType); if (!element.ResolveTo(field, out errorDescription)) { result = false; break; } } return(result); } }