public void Parse(SrcMap srcMap)
    {
        srcMap.headers.ForEach(x => Parse(x));

        srcMap.globalNamespace = new LexNamespace();

        foreach (var header in srcMap.headers)
            CopyNamespace(header.globalNamespace, srcMap.globalNamespace);

        BindUsingNamespaces(srcMap.globalNamespace);

        ProcessTypedefs(srcMap.globalNamespace);

        srcMap.allClasses = GetAllClasses(srcMap.globalNamespace);

        foreach (var cls in srcMap.allClasses)
        {
            if (cls.parentLexSection != null && cls.parentLexSection.GetType() == typeof(LexClass) && (cls.parentLexSection as LexClass).isTemplate)
                cls.isTemplate = true;
        }

        Console.Write("Starting specializing templates... " + DateTime.Now + "\n");

        SpecializeTemplates(srcMap);

        foreach (var cls in srcMap.allClasses)
        {
            foreach (var baseCls in cls.baseClasses)
            {
                baseCls.lexClass = cls.parentLexSection.FindLexSection(baseCls.className) as LexClass;
            }
        }

        BindComments(srcMap.globalNamespace);
    }
    public void Generate(string outputPath, string directoriesCut, SrcMap map)
    {
        this.directoriesCut = directoriesCut;
        iobjectClass        = map.allClasses.Find(x => x.name == "::IObject");
        reflectableClasses  = map.allClasses.FindAll(x =>
        {
            return(x.IsBasedOn(iobjectClass) && !x.isTemplate && !x.isTypedef);
        }).ToList();

        GenerateHeader(outputPath);
        GenerateSource(outputPath);
    }
    public void Generate(string outputPath, string directoriesCut, SrcMap map)
    {
        this.directoriesCut = directoriesCut;
        iobjectClass = map.allClasses.Find(x => x.name == "::IObject");
        reflectableClasses = map.allClasses.FindAll(x =>
        {
            return x.IsBasedOn(iobjectClass) &&  !x.isTemplate && !x.isTypedef;

        }).ToList();

        GenerateHeader(outputPath);
        GenerateSource(outputPath);
    }
Exemple #4
0
    void SpecializeTemplates(SrcMap srcMap)
    {
        List <LexClass> newClasses = new List <LexClass>();

        foreach (var cls in srcMap.allClasses)
        {
            if (!cls.isTemplate)
            {
                continue;
            }

            if (cls.shortName[cls.shortName.Length - 1] == '>')
            {
                continue;
            }

            List <string> specializations = new List <string>();

            foreach (var src in srcMap.headers)
            {
                SearchSpecializations(specializations, src, cls);
            }

            /*foreach (var src in srcMap.sources)
             *      SearchSpecializations(specializations, src, cls);*/

            //Console.Write("Found " + specializations.Count() + " specializations for " + cls.name + "\n");

            foreach (var spec in specializations)
            {
                LexClass newClass = cls.Clone();
                newClass.shortName += "<" + spec + ">";
                newClass.isTemplate = false;
                SpecializeClassName(newClass, spec, cls.shortName, newClasses, srcMap.allClasses);
                cls.parentLexSection.classes.Add(newClass);
                cls.parentLexSection.childSections.Add(newClass);
            }
        }

        newClasses.ForEach(x => srcMap.allClasses.Add(x));
    }
Exemple #5
0
    public void Parse(SrcMap srcMap)
    {
        srcMap.headers.ForEach(x => Parse(x));

        srcMap.globalNamespace = new LexNamespace();

        foreach (var header in srcMap.headers)
        {
            CopyNamespace(header.globalNamespace, srcMap.globalNamespace);
        }

        BindUsingNamespaces(srcMap.globalNamespace);

        ProcessTypedefs(srcMap.globalNamespace);

        srcMap.allClasses = GetAllClasses(srcMap.globalNamespace);

        foreach (var cls in srcMap.allClasses)
        {
            if (cls.parentLexSection != null && cls.parentLexSection.GetType() == typeof(LexClass) && (cls.parentLexSection as LexClass).isTemplate)
            {
                cls.isTemplate = true;
            }
        }

        Console.Write("Starting specializing templates... " + DateTime.Now + "\n");

        SpecializeTemplates(srcMap);

        foreach (var cls in srcMap.allClasses)
        {
            foreach (var baseCls in cls.baseClasses)
            {
                baseCls.lexClass = cls.parentLexSection.FindLexSection(baseCls.className) as LexClass;
            }
        }

        BindComments(srcMap.globalNamespace);
    }
    void SpecializeTemplates(SrcMap srcMap)
    {
        List<LexClass> newClasses = new List<LexClass>();
        foreach (var cls in srcMap.allClasses)
        {
            if (!cls.isTemplate)
                continue;

            if (cls.shortName[cls.shortName.Length - 1] == '>')
                continue;

            List<string> specializations = new List<string>();

            foreach (var src in srcMap.headers)
                SearchSpecializations(specializations, src, cls);

            /*foreach (var src in srcMap.sources)
                SearchSpecializations(specializations, src, cls);*/

            //Console.Write("Found " + specializations.Count() + " specializations for " + cls.name + "\n");

            foreach (var spec in specializations)
            {
                LexClass newClass = cls.Clone();
                newClass.shortName += "<" + spec + ">";
                newClass.isTemplate = false;
                SpecializeClassName(newClass, spec, cls.shortName, newClasses, srcMap.allClasses);
                cls.parentLexSection.classes.Add(newClass);
                cls.parentLexSection.childSections.Add(newClass);
            }
        }

        newClasses.ForEach(x => srcMap.allClasses.Add(x));
    }
Exemple #7
0
        static void Main(string[] args)
        {
            DateTime beginTime = DateTime.Now;
            Console.Write("Starting ... " + beginTime + "\n");

            bool debug = false;

            SrcMap data = new SrcMap();
            CppLexParser parser = new CppLexParser();

            string output = args[0];

            for (int i = 1; i < args.Length; i++)
            {
                foreach (var file in Directory.EnumerateFiles(args[i], "*.*", SearchOption.AllDirectories))
                {
                    if (file.EndsWith(".h"))
                    {
                        SourceFile header = new SourceFile();
                        header.location = file;
                        header.data = File.ReadAllText(file);
                        data.headers.Add(header);
                    }
                    else if (file.EndsWith(".cpp"))
                    {
                        SourceFile header = new SourceFile();
                        header.location = file;
                        header.data = File.ReadAllText(file);
                        data.sources.Add(header);
                    }
                }
            }

            parser.Parse(data);

            Console.Write("Parsing done\n");

            if (debug)
            {
                foreach (var cls in data.allClasses)
                {
                    Console.Write("class: " + cls.name + ": ");
                    cls.baseClasses.ForEach(x => Console.Write(x.type + " " + x.className + " (" + (x.lexClass != null).ToString() + ")"));
                    if (cls.isTemplate)
                        Console.Write(" TEMPLATE!!!");
                    Console.Write("\n");
                }

            // 				var iobjectClass = data.allClasses.Find(x => x.name == "o2::IObject");
            // 				var reflectableClasses = data.allClasses.FindAll(x => x.IsBasedOn(iobjectClass) && !x.isTemplate).ToList();
            // 				reflectableClasses.ForEach(x => PrintClass(x, ""));

            // 				using (var writer = new System.IO.StreamWriter("map.xml"))
            // 				{
            // 					var serializer = new XmlSerializer(data.GetType());
            // 					serializer.Serialize(writer, data);
            // 					writer.Flush();
            // 				}
            }

            CppReflectionGenerator reflGenerator = new CppReflectionGenerator();
            reflGenerator.Generate(output, "", data);

            Console.Write("Complete! " + (DateTime.Now - beginTime).ToString());
        }
Exemple #8
0
        static void Main(string[] args)
        {
            DateTime beginTime = DateTime.Now;

            Console.Write("Starting ... " + beginTime + "\n");

            bool debug = false;

            SrcMap       data   = new SrcMap();
            CppLexParser parser = new CppLexParser();

            string output = args[0];

            for (int i = 1; i < args.Length; i++)
            {
                foreach (var file in Directory.EnumerateFiles(args[i], "*.*", SearchOption.AllDirectories))
                {
                    if (file.EndsWith(".h"))
                    {
                        SourceFile header = new SourceFile();
                        header.location = file;
                        header.data     = File.ReadAllText(file);
                        data.headers.Add(header);
                    }
                    else if (file.EndsWith(".cpp"))
                    {
                        SourceFile header = new SourceFile();
                        header.location = file;
                        header.data     = File.ReadAllText(file);
                        data.sources.Add(header);
                    }
                }
            }

            parser.Parse(data);

            Console.Write("Parsing done\n");

            if (debug)
            {
                foreach (var cls in data.allClasses)
                {
                    Console.Write("class: " + cls.name + ": ");
                    cls.baseClasses.ForEach(x => Console.Write(x.type + " " + x.className + " (" + (x.lexClass != null).ToString() + ")"));
                    if (cls.isTemplate)
                    {
                        Console.Write(" TEMPLATE!!!");
                    }
                    Console.Write("\n");
                }

//              var iobjectClass = data.allClasses.Find(x => x.name == "o2::IObject");
//              var reflectableClasses = data.allClasses.FindAll(x => x.IsBasedOn(iobjectClass) && !x.isTemplate).ToList();
//              reflectableClasses.ForEach(x => PrintClass(x, ""));

//              using (var writer = new System.IO.StreamWriter("map.xml"))
//              {
//                  var serializer = new XmlSerializer(data.GetType());
//                  serializer.Serialize(writer, data);
//                  writer.Flush();
//              }
            }

            CppReflectionGenerator reflGenerator = new CppReflectionGenerator();

            reflGenerator.Generate(output, "", data);

            Console.Write("Complete! " + (DateTime.Now - beginTime).ToString());
        }