예제 #1
0
        private void ApplyGlVersion(GlVersion glVersion)
        {
            foreach (GlEnum glEnum in glVersion.AddedEnums)
            {
                if (!Enums.Contains(glEnum))
                {
                    Enums.Add(glEnum);
                }
            }
            foreach (GlFunction glFunction in glVersion.AddedFunctions)
            {
                if (!Functions.Contains(glFunction))
                {
                    Functions.Add(glFunction);
                }
            }

            if (HasProfiles)
            {
                if (Profile == GlProfile.Core)
                {
                    ApplyCoreProfile(glVersion);
                }
                else if (Profile == GlProfile.Compatibility)
                {
                    ApplyCompatibilityProfile(glVersion);
                }
            }
        }
예제 #2
0
        private void ApplyCoreProfile(GlVersion glVersion)
        {
            foreach (GlEnum glEnum in glVersion.AddedCoreEnums)
            {
                if (!Enums.Contains(glEnum))
                {
                    Enums.Add(glEnum);
                }
            }

            Enums.RemoveAll(glEnum => glVersion.RemovedCoreEnums.Contains(glEnum));
            Functions.RemoveAll(glFunction => glVersion.RemovedCoreFunctions.Contains(glFunction));
        }
예제 #3
0
 private void ApplyCompatibilityProfile(GlVersion glVersion)
 {
     foreach (GlEnum glEnum in glVersion.AddedCompatibilityEnums)
     {
         if (!Enums.Contains(glEnum))
         {
             Enums.Add(glEnum);
         }
     }
     foreach (GlFunction glFunction in glVersion.AddedCompatibilityFunctions)
     {
         if (!Functions.Contains(glFunction))
         {
             Functions.Add(glFunction);
         }
     }
 }
예제 #4
0
        protected override async Task <int> BuildInternal(BuildSettings settings)
        {
            var filesToCreate = EntityHelper.EntityTypes.Where(e => Enums.Contains(e.Name));

            BuilderFileCountUpdate(filesToCreate.Count());

            await Pause.WaitWhilePausedAsync();

            foreach (var file in filesToCreate)
            {
                var filePath = string.Concat(settings.EnumerationPath, file.Name, settings.FileExtension);

                await BuildFile <eBuildSectionEnumeration>(filePath, file, settings);

                await Pause.WaitWhilePausedAsync();

                if (Cancellation.IsCancellationRequested)
                {
                    break;
                }
            }

            return(filesToCreate.Count());
        }
예제 #5
0
            public void MapObj(Type o)
            {
                bool isArray = false, isByRef = false;

                string ShortName = FixName(o, ref isArray, ref isByRef);

                if (Enums.Contains(ShortName))
                {
                    return;
                }

                Console.WriteLine(ShortName);
                Enums.Add(ShortName);

                XmlDocument CDOC = new XmlDocument();

                string title = "class";

                if (o.IsValueType)
                {
                    title = "struct";
                }
                if (o.IsInterface)
                {
                    title = "interface";
                }

                var x1 = NewNode(CDOC, title, FixName(o, ref isArray, ref isByRef));

                AddAttribute(x1, "fullName", o.FullName);
                AddAttribute(x1, "assembly", o.Assembly.FullName);
                AddAttribute(x1, "location", o.Assembly.Location);
                IdType(o, x1);

                if (o.GetConstructor(Type.EmptyTypes) == null && o.IsAbstract && o.IsSealed)
                {
                    AddAttribute(x1, "static", "1");
                }

                x1.AppendChild(CDOC.CreateElement("interfaces"));
                x1.AppendChild(CDOC.CreateElement("constructors"));
                x1.AppendChild(CDOC.CreateElement("fields"));
                x1.AppendChild(CDOC.CreateElement("props"));
                var xMethods = (CDOC.CreateElement("methods"));

                x1.AppendChild(xMethods);

                CDOC.AppendChild(x1);

                foreach (var i in o.GetInterfaces())
                {
                    var Name = (i.FullName == null ? i.Name : i.FullName);

                    if (Name != null)
                    {
                        bool dum = false;
                        var  x2  = NewNode(CDOC, "interface", FixName(i, ref dum, ref dum));
                        Type iT  = i.GetType();
                        MapObj(i);

                        x1.SelectSingleNode("interfaces").AppendChild(x2);
                    }
                }


                foreach (var mi in o.GetConstructors())
                {
                    var x2 = (XmlElement)CDOC.CreateElement("constructor");


                    foreach (var pi in mi.GetParameters())
                    {
                        var x3 = NewNode(CDOC, "param", pi.Name);

                        IdType(pi.ParameterType, x3);
                        x2.AppendChild(x3);
                    }

                    x1.SelectSingleNode("constructors").AppendChild(x2);
                }

                var pnames = new List <string>();

                foreach (FieldInfo fi in o.GetFields())
                {
                    pnames.Add(fi.Name);

                    var f = NewNode(CDOC, "field", fi.Name);

                    AddAttribute(f, "value");

                    Type t = fi.FieldType;
                    IdType(t, f);

                    int iType = Convert.ToInt32(f.GetAttribute("type"));


                    x1.SelectSingleNode("fields").AppendChild(f);
                }

                foreach (PropertyInfo pi in o.GetProperties())
                {
                    //necessary because adds prop twice if read/write
                    if (!pnames.Contains(pi.Name))
                    {
                        var p = NewNode(CDOC, "prop", pi.Name);

                        var list = pi.GetIndexParameters();
                        if (list.Length > 0)
                        {
                            AddAttribute(p, "index", GetDataType(list[0].ParameterType).ToString());
                        }
                        AddAttribute(p, "value");
                        AddAttribute(p, "read", pi.CanRead ? "1" : "0");
                        AddAttribute(p, "write", pi.CanWrite ? "1" : "0");

                        Type t = pi.PropertyType;
                        IdType(t, p);

                        x1.SelectSingleNode("props").AppendChild(p);
                        pnames.Add(pi.Name);
                        x1.SelectSingleNode("props").AppendChild(p);
                    }
                }

                int staticMethods = 0;
                int totalMethods  = 0;

                if (o.IsInterface)
                {
                    int i = 0;
                }
                foreach (var mi in o.GetMethods())
                {
                    if (mi.Name.StartsWith("get_") || mi.Name.StartsWith("set_"))
                    {
                        continue;
                    }
                    if (mi.Name == "GetType")
                    {
                        continue;
                    }

                    totalMethods++;

                    XmlElement x2 = null;
                    XmlElement x3 = null;

                    foreach (XmlElement x2a in xMethods.SelectNodes("method"))
                    {
                        if (x2a.GetAttribute("name") == mi.Name)
                        {
                            x2 = x2a; break;
                        }
                    }

                    if (x2 == null)
                    {
                        x2 = NewNode(CDOC, "method", mi.Name);
                        xMethods.AppendChild(x2);

                        x3 = CDOC.CreateElement("overloads");
                        x2.AppendChild(x3);

                        Type t = mi.ReturnType;

                        IdType(t, x2);
                        int iType = Convert.ToInt32(x2.GetAttribute("type"));
                    }
                    else
                    {
                        x3 = (XmlElement)x2.SelectSingleNode("overloads");
                    }

                    if (mi.IsStatic)
                    {
                        staticMethods++;
                        AddAttribute(x2, "static", "1");
                    }

                    var x4 = CDOC.CreateElement("params");

                    foreach (var pi in mi.GetParameters())
                    {
                        Type t  = pi.ParameterType;
                        var  x5 = NewNode(CDOC, "param", pi.Name);
                        IdType(t, x5);
                        x4.AppendChild(x5);
                    }

                    bool dupe = false;
                    foreach (XmlElement nowParms in x3.ChildNodes)
                    {
                        dupe = (nowParms.InnerXml == x4.InnerXml);
                        if (dupe)
                        {
                            break;
                        }
                    }

                    if (!dupe)
                    {
                        x3.AppendChild(x4);
                    }
                }



                if (totalMethods == staticMethods && totalMethods != 0)
                {  // this should be good cuz can't have non static methods in a static class
                    AddAttribute(x1, "static", "1");
                }

                if (ShortName == "System.Data.SqlClient.SqlCommand")
                {
                    Debug.Print("bam");
                }
                ;

                Write(CDOC);
            }