Cleaned up Generator class tree

This significantly reduces the amount of duplicated code between
Generator implementations.
This commit is contained in:
Stefanos A. 2013-10-31 00:18:07 +01:00
parent 51cb1f02db
commit a3bd227e20
4 changed files with 34 additions and 43 deletions

View file

@ -12,29 +12,12 @@ namespace Bind.ES
class ESGenerator : Generator
{
public ESGenerator(string nsName, string dirName)
: base(nsName, dirName)
{
if (String.IsNullOrEmpty(nsName))
throw new ArgumentNullException("nsName");
if (dirName == null)
dirName = nsName;
glTypemap = "GL2/gl.tm";
csTypemap = Settings.LanguageTypeMapFile;
enumSpec = dirName + "/signatures.xml";
enumSpecExt = String.Empty;
glSpec = dirName + "/signatures.xml";
glSpecExt = String.Empty;
Settings.OverridesFile = dirName + "/overrides.xml";
Settings.ImportsFile = "Core.cs";
Settings.DelegatesFile = "Delegates.cs";
Settings.EnumsFile = "Enums.cs";
Settings.WrappersFile = "ES.cs";
Settings.ImportsClass = "Core";
Settings.DelegatesClass = "Delegates";
Settings.OutputClass = "GL";
}
}
}

View file

@ -27,33 +27,20 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
namespace Bind.GL2
{
class GL4Generator : ES.ESGenerator
class GL4Generator : Generator
{
public GL4Generator(string name, string dirname)
: base(name, dirname)
: base(name, dirname)
{
glTypemap = "GL2/gl.tm";
csTypemap = Settings.LanguageTypeMapFile;
Settings.OverridesFile = Path.Combine(dirname, "gloverrides.xml");
enumSpec = "GL2/signatures.xml";
enumSpecExt = String.Empty;
glSpec = "GL2/signatures.xml";
glSpecExt = String.Empty;
Settings.OverridesFile = "GL2/gloverrides.xml";
Settings.ImportsFile = "GLCore.cs";
Settings.DelegatesFile = "GLDelegates.cs";
Settings.EnumsFile = "GLEnums.cs";
Settings.WrappersFile = "GL.cs";
Settings.ImportsClass = "Core";
Settings.DelegatesClass = "Delegates";
Settings.OutputClass = "GL";
Profile = "glcore";
}
}
}

View file

@ -37,13 +37,33 @@ namespace Bind.GL2
//protected static readonly Dictionary<string, string> doc_replacements;
protected ISpecReader SpecReader = new XmlSpecReader();
protected string Profile = "gl";
#endregion
#region Constructors
public Generator()
public Generator(string nsName, string dirName)
{
if (String.IsNullOrEmpty(nsName))
throw new ArgumentNullException("nsName");
if (dirName == null)
dirName = "GL2";
glTypemap = "GL2/gl.tm";
csTypemap = Settings.LanguageTypeMapFile;
enumSpec = Path.Combine(dirName, "signatures.xml");
enumSpecExt = String.Empty;
glSpec = Path.Combine(dirName, "signatures.xml");
glSpecExt = String.Empty;
Settings.OverridesFile = Path.Combine(dirName, "overrides.xml");
Settings.ImportsClass = "Core";
Settings.DelegatesClass = "Delegates";
Settings.OutputClass = "GL";
if (Settings.Compatibility == Settings.Legacy.Tao)
{
Settings.OutputNamespace = "Tao.OpenGl";
@ -77,11 +97,9 @@ namespace Bind.GL2
string overrides = Path.Combine(Settings.InputPath, Settings.OverridesFile);
Type.GLTypes = SpecReader.ReadTypeMap(Path.Combine(Settings.InputPath, glTypemap));
Type.CSTypes = SpecReader.ReadCSTypeMap(Path.Combine(Settings.InputPath, csTypemap));
SpecReader.ReadEnums(Path.Combine(Settings.InputPath, enumSpec), Enums, "gl");
SpecReader.ReadEnums(Path.Combine(Settings.InputPath, enumSpec), Enums, "glcore");
SpecReader.ReadEnums(Path.Combine(Settings.InputPath, enumSpec), Enums, Profile);
SpecReader.ReadEnums(overrides, Enums, "");
SpecReader.ReadDelegates(Path.Combine(Settings.InputPath, glSpec), Delegates, "gl");
SpecReader.ReadDelegates(Path.Combine(Settings.InputPath, glSpec), Delegates, "glcore");
SpecReader.ReadDelegates(Path.Combine(Settings.InputPath, glSpec), Delegates, Profile);
SpecReader.ReadDelegates(overrides, Delegates, "");
var enum_processor = new EnumProcessor(overrides);

View file

@ -162,9 +162,12 @@ namespace Bind
switch (mode)
{
case GeneratorMode.GL3:
case GeneratorMode.GL2:
Generator = new GL4Generator("OpenGL", dirName);
Generator = new Generator("OpenGL", dirName);
break;
case GeneratorMode.GL3:
Generator = new GL4Generator("OpenGL.Core", dirName);
break;
case GeneratorMode.ES10: