예제 #1
0
        private StreamDescription ReadStreamDescriptor(EmberReader reader)
        {
            reader.AssertInnerNumber(GlowStreamDescription.InnerNumber);
            reader.ReadAndAssertOuter(GlowStreamDescription.Format.OuterId);
            var streamFormat = this.ReadEnum <StreamFormat>(reader, GlowStreamDescription.Format.Name);

            reader.ReadAndAssertOuter(GlowStreamDescription.Offset.OuterId);
            var offset = this.ReadInt(reader, GlowStreamDescription.Offset.Name);

            while (reader.Read() && (reader.InnerNumber != InnerNumber.EndContainer))
            {
                reader.Skip();
            }

            return(new StreamDescription(streamFormat, offset));
        }
예제 #2
0
        internal void Read(
            EmberReader reader,
            IDictionary <int, IInvocationResult> pendingInvocations,
            IReadOnlyDictionary <int, IEnumerable <IStreamedParameter> > streamedParameters)
        {
            reader.ReadAndAssertOuter(GlowGlobal.Root.OuterId);

            switch (reader.InnerNumber)
            {
            case GlowRootElementCollection.InnerNumber:
                this.ReadChildren(reader);
                break;

            case GlowInvocationResult.InnerNumber:
                ReadInvocationResult(reader, pendingInvocations);
                break;

            case GlowStreamCollection.InnerNumber:
                ReadStreamCollection(reader, streamedParameters);
                break;

            default:
                reader.Skip();
                break;
            }
        }
예제 #3
0
        private void ReadQualifiedChild(EmberReader reader, ElementType actualType)
        {
            reader.ReadAndAssertOuter(GlowQualifiedNode.Path.OuterId);
            var path = reader.AssertAndReadContentsAsInt32Array();

            if (path.Length == 0)
            {
                throw new ModelException("Invalid path for a qualified element.");
            }

            this.ReadQualifiedChild(reader, actualType, path, 0);
        }
예제 #4
0
        private List <KeyValuePair <string, int> > ReadEnumMap(EmberReader reader)
        {
            reader.AssertInnerNumber(GlowStringIntegerCollection.InnerNumber);
            var result = new List <KeyValuePair <string, int> >();

            while (reader.Read() && (reader.InnerNumber != InnerNumber.EndContainer))
            {
                reader.AssertInnerNumber(GlowStringIntegerPair.InnerNumber);
                reader.ReadAndAssertOuter(GlowStringIntegerPair.EntryString.OuterId);
                var entryString = reader.AssertAndReadContentsAsString();
                reader.ReadAndAssertOuter(GlowStringIntegerPair.EntryInteger.OuterId);
                var entryInteger = this.ReadInt(reader, GlowStringIntegerPair.EntryInteger.Name);

                while (reader.Read() && (reader.InnerNumber != InnerNumber.EndContainer))
                {
                    reader.Skip();
                }

                result.Add(new KeyValuePair <string, int>(entryString, entryInteger));
            }

            return(result);
        }
예제 #5
0
        internal virtual KeyValuePair <string, ParameterType> ReadTupleItemDescription(
            EmberReader reader, KeyValuePair <string, ParameterType>[] expectedTypes, int index)
        {
            reader.AssertInnerNumber(GlowTupleItemDescription.InnerNumber);
            reader.ReadAndAssertOuter(GlowTupleItemDescription.Type.OuterId);
            var    type = this.ReadEnum <ParameterType>(reader, GlowTupleItemDescription.Type.Name);
            string name = null;

            while (reader.Read() && (reader.InnerNumber != InnerNumber.EndContainer))
            {
                switch (reader.GetContextSpecificOuterNumber())
                {
                case GlowTupleItemDescription.TheName.OuterNumber:
                    name = reader.AssertAndReadContentsAsString();
                    break;

                default:
                    reader.Skip();
                    break;
                }
            }

            return(new KeyValuePair <string, ParameterType>(name, type));
        }
 internal void ReadChild(EmberReader reader, ElementType actualType)
 {
     reader.ReadAndAssertOuter(GlowNode.Number.OuterId);
     this.ReadChild(reader, actualType, reader.AssertAndReadContentsAsInt32());
 }