Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
            }
        }