// Create a new field that contains the references to the indexed field
        private static void UpdateIndexes(protozbuffType root)
        {
            var allMessages = root.Items.OfType<messageType>().ToList();
            foreach (var msg in allMessages)
            {
                if (msg.index == null)
                    msg.index = new indexType[0];

                foreach (var index in msg.index)
                {
                    var indexedField = msg.field.SingleOrDefault(field => field.id == index.forField);

                    // convert index to repeated references 
                    index.ReferenceField = new fieldType
                    {
                        id = index.id,
                        modifier = modifierType.repeated,
                        type = typeType.referenceMessage,
                        messageType = indexedField.messageType,
                        name = indexedField.name,
                        @default = indexedField.@default
                    };

                    if (string.IsNullOrEmpty(index.name))
                    {
                        index.name = indexedField.name + "By" + index.sortBy.Capitalize();
                    }

                    // TODO check that only referenceMessage types are used for index on fields
                    var referencedFieldMessageType = allMessages.SingleOrDefault(m => m.name == index.ReferenceField.messageType);
                    var sortingField = referencedFieldMessageType.field.SingleOrDefault(field => field.name == index.sortBy);
                    index.SortingField = sortingField;
                }
            }
        }
示例#2
0
 public static void Generate(protozbuffType p, string protoFilename, string nspace)
 {
     using (var textfile = File.CreateText(protoFilename))
     {
         Generate(p, textfile, nspace);
     }
 }
 public static void Generate(protozbuffType p, string protoFilename, string nspace)
 {
     using (var textfile = File.CreateText(protoFilename))
     {
         Generate(p, textfile, nspace);
     }
 }
示例#4
0
        public void Visit(protozbuffType node)
        {
            _strm.WriteLine("package {0};", _namespace);

            foreach (IAstNode message in node.Items)
            {
                _strm.WriteLine();
                message.Accept(this);
            }

            GenerateLocalMessageDescriptor();
        }
示例#5
0
        private static void Check(protozbuffType root)
        {
            var allMessages = root.Items.OfType <messageType>().ToList();

            var msgNames = new HashSet <string>();

            foreach (var msg in allMessages)
            {
                if (!msgNames.Add(msg.name))
                {
                    Logger.Fatal("Duplicated definition for message {0}", msg.name);
                }
            }

            foreach (var msg in allMessages)
            {
                CheckFieldsInMsg(allMessages, msg);
                CheckIndexesInMsg(allMessages, msg);
            }
        }
示例#6
0
        /// <summary>
        /// Load an xml file from <paramref name="p"/> as an instance of protozbuff format
        /// </summary>
        /// <param name="p"></param>
        /// <returns></returns>
        public static protozbuffType Load(string p)
        {
            if (string.IsNullOrWhiteSpace(p))
            {
                return(null);
            }
            protozbuffType rootNode = null;

            try
            {
                using (var file = File.OpenText(p))
                {
                    rootNode = Load(file);
                }
            }
            catch (FileNotFoundException f)
            {
                Logger.Fatal(f.Message);
            }
            return(rootNode);
        }
示例#7
0
        // Create a new field that contains the references to the indexed field
        private static void UpdateIndexes(protozbuffType root)
        {
            var allMessages = root.Items.OfType <messageType>().ToList();

            foreach (var msg in allMessages)
            {
                if (msg.index == null)
                {
                    msg.index = new indexType[0];
                }

                foreach (var index in msg.index)
                {
                    var indexedField = msg.field.SingleOrDefault(field => field.id == index.forField);

                    // convert index to repeated references
                    index.ReferenceField = new fieldType
                    {
                        id          = index.id,
                        modifier    = modifierType.repeated,
                        type        = typeType.referenceMessage,
                        messageType = indexedField.messageType,
                        name        = indexedField.name,
                        @default    = indexedField.@default
                    };

                    if (string.IsNullOrEmpty(index.name))
                    {
                        index.name = indexedField.name + "By" + index.sortBy.Capitalize();
                    }

                    // TODO check that only referenceMessage types are used for index on fields
                    var referencedFieldMessageType = allMessages.SingleOrDefault(m => m.name == index.ReferenceField.messageType);
                    var sortingField = referencedFieldMessageType.field.SingleOrDefault(field => field.name == index.sortBy);
                    index.SortingField = sortingField;
                }
            }
        }
        private static void Check(protozbuffType root)
        {
            var allMessages = root.Items.OfType<messageType>().ToList();

            var msgNames = new HashSet<string>();
            foreach (var msg in allMessages)
            {
                if (!msgNames.Add(msg.name))
                    Logger.Fatal("Duplicated definition for message {0}", msg.name);
            }

            foreach (var msg in allMessages)
            {
                CheckFieldsInMsg(allMessages, msg);
                CheckIndexesInMsg(allMessages, msg);
            }
        }
        public void Visit(protozbuffType node)
        {
            _strm.WriteLine("package {0};", _namespace);

            foreach (IAstNode message in node.Items)
            {
                _strm.WriteLine();
                message.Accept(this);
            }

            GenerateLocalMessageDescriptor();
        }