Inheritance: IAstNode
コード例 #1
0
        private static void CheckIndexesInMsg(IEnumerable <messageType> allMessages, messageType msg)
        {
            if (msg.index == null)
            {
                return;
            }

            foreach (var index in msg.index)
            {
                var indexedField = msg.field.SingleOrDefault(field => field.id == index.forField);
                if (indexedField == null)
                {
                    Logger.Fatal("Message {0}: index {1} references unknown field {2}", msg.name, index.id, index.forField);
                    continue;
                }

                if (indexedField.modifier != modifierType.repeated)
                {
                    Logger.Fatal("Message {0}: index {1} references non repeated field {2}", msg.name, index.id, indexedField.name);
                    continue;
                }

                if (!new[] { typeType.nestedMessage, typeType.referenceMessage }.Contains(indexedField.type))
                {
                    Logger.Fatal("Message {0}: index {1} references non message field {2}", msg.name, index.id, indexedField.name);
                    continue;
                }

                // get the pointed message and check if it contains the wanted field
                var referencedFieldMessageType = allMessages.SingleOrDefault(m => m.name == indexedField.messageType);
                Debug.Assert(referencedFieldMessageType != null);

                var sortingField = referencedFieldMessageType.field.SingleOrDefault(field => field.name == index.sortBy);
                if (sortingField == null)
                {
                    Logger.Fatal("Message {0}: index {1}'s sortBy ({2}) isn't a field of message {3}", msg.name, index.id, index.sortBy, referencedFieldMessageType.name);
                    continue;
                }

                if (sortingField.modifier != modifierType.required)
                {
                    Logger.Fatal("Message {0}: index {1}'s sortBy ({2}) isn't a required field of message {3}", msg.name, index.id, index.sortBy, referencedFieldMessageType.name);
                    continue;
                }

                if (new[] { typeType.nestedMessage, typeType.referenceMessage }.Contains(sortingField.type))
                {
                    Logger.Fatal("Message {0}: index {1}'s sortBy ({2}) can't be a message", msg.name, index.id, index.sortBy);
                }
            }
        }
コード例 #2
0
        public void Visit(messageType node)
        {
            _strm.WriteLine("message {0}Header", node.name);
            _strm.WriteLine("{");

            foreach (var field in node.field)
            {
                field.Accept(this);
            }

            foreach (var index in node.index)
            {
                index.Accept(this);
            }

            _strm.WriteLine("}");
        }
コード例 #3
0
        private static void CheckFieldsInMsg(IEnumerable <messageType> allMessages, messageType msg)
        {
            if (msg.field == null)
            {
                return;
            }

            foreach (var field in msg.field)
            {
                if (field.id < 1)
                {
                    Logger.Fatal("Message {0}: field {1}'s id should be >= 1", msg.name, field.name);
                    continue;
                }

                if (field.messageType != null && allMessages.SingleOrDefault(m => m.name == field.messageType) == null)
                {
                    Logger.Fatal("Message {0}: field {1} references unknown message {2}", msg.name, field.name, field.messageType);
                }
            }
        }
コード例 #4
0
        private static void CheckIndexesInMsg(IEnumerable<messageType> allMessages, messageType msg)
        {
            if (msg.index == null)
                return;

            foreach (var index in msg.index)
            {
                var indexedField = msg.field.SingleOrDefault(field => field.id == index.forField);
                if (indexedField == null)
                {
                    Logger.Fatal("Message {0}: index {1} references unknown field {2}", msg.name, index.id, index.forField);
                    continue;
                }

                if (indexedField.modifier != modifierType.repeated)
                {
                    Logger.Fatal("Message {0}: index {1} references non repeated field {2}", msg.name, index.id, indexedField.name);
                    continue;
                }

                if (!new[] { typeType.nestedMessage, typeType.referenceMessage }.Contains(indexedField.type))
                {
                    Logger.Fatal("Message {0}: index {1} references non message field {2}", msg.name, index.id, indexedField.name);
                    continue;
                }

                // get the pointed message and check if it contains the wanted field
                var referencedFieldMessageType = allMessages.SingleOrDefault(m => m.name == indexedField.messageType);
                Debug.Assert(referencedFieldMessageType != null);

                var sortingField = referencedFieldMessageType.field.SingleOrDefault(field => field.name == index.sortBy);
                if (sortingField == null)
                {
                    Logger.Fatal("Message {0}: index {1}'s sortBy ({2}) isn't a field of message {3}", msg.name, index.id, index.sortBy, referencedFieldMessageType.name);
                    continue;
                }

                if (sortingField.modifier != modifierType.required)
                {
                    Logger.Fatal("Message {0}: index {1}'s sortBy ({2}) isn't a required field of message {3}", msg.name, index.id, index.sortBy, referencedFieldMessageType.name);
                    continue;
                }

                if (new[] { typeType.nestedMessage, typeType.referenceMessage }.Contains(sortingField.type))
                {
                    Logger.Fatal("Message {0}: index {1}'s sortBy ({2}) can't be a message", msg.name, index.id, index.sortBy);
                }
            }
        }
コード例 #5
0
        private static void CheckFieldsInMsg(IEnumerable<messageType> allMessages, messageType msg)
        {
            if (msg.field == null)
                return;

            foreach (var field in msg.field)
            {
                if (field.id < 1)
                {
                    Logger.Fatal("Message {0}: field {1}'s id should be >= 1", msg.name, field.name);
                    continue;
                }

                if (field.messageType != null && allMessages.SingleOrDefault(m => m.name == field.messageType) == null)
                {
                    Logger.Fatal("Message {0}: field {1} references unknown message {2}", msg.name, field.name, field.messageType);
                }
            }
        }
コード例 #6
0
        public void Visit(messageType node)
        {
            _strm.WriteLine("message {0}Header", node.name);
            _strm.WriteLine("{");

            foreach (var field in node.field)
            {
                field.Accept(this);
            }

            foreach (var index in node.index)
            {
                index.Accept(this);
            }

            _strm.WriteLine("}");
        }