Tools and libraries to glue C/C++ APIs to high-level languages
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

195 lines
5.7 KiB

using System;
using System.Collections.Generic;
using CppSharp.AST;
namespace CppSharp.Generators
{
public abstract class CodeGenerator : BlockGenerator, IDeclVisitor<bool>
{
public BindingContext Context { get; }
public DriverOptions Options => Context.Options;
public List<TranslationUnit> TranslationUnits { get; }
public TranslationUnit TranslationUnit => TranslationUnits[0];
public abstract string FileExtension { get; }
protected CodeGenerator(BindingContext context, TranslationUnit unit)
: this(context, new List<TranslationUnit> { unit })
{
}
protected CodeGenerator(BindingContext context, IEnumerable<TranslationUnit> units)
{
Context = context;
TranslationUnits = new List<TranslationUnit>(units);
}
public abstract void Process();
public override string Generate()
{
if (Options.IsCSharpGenerator && Options.CompileCode)
return base.GenerateUnformatted();
return base.Generate();
}
public virtual void GenerateFilePreamble()
{
PushBlock(BlockKind.Header);
WriteLine("//----------------------------------------------------------------------------");
WriteLine("// <auto-generated>");
WriteLine("// This is autogenerated code by CppSharp.");
WriteLine("// Do not edit this file or all your changes will be lost after re-generation.");
WriteLine("// </auto-generated>");
WriteLine("//----------------------------------------------------------------------------");
PopBlock();
}
#region Visitor methods
public virtual bool VisitDeclaration(Declaration decl)
{
throw new NotImplementedException();
}
public virtual bool VisitDeclContext(DeclarationContext context)
{
foreach (var decl in context.Declarations)
if (!decl.IsGenerated)
decl.Visit(this);
return true;
}
public virtual bool VisitClassDecl(Class @class)
{
return VisitDeclContext(@class);
}
public virtual bool VisitFieldDecl(Field field)
{
throw new NotImplementedException();
}
public virtual bool VisitFunctionDecl(Function function)
{
throw new NotImplementedException();
}
public virtual bool VisitMethodDecl(Method method)
{
throw new NotImplementedException();
}
public virtual bool VisitParameterDecl(Parameter parameter)
{
throw new NotImplementedException();
}
public virtual bool VisitTypedefDecl(TypedefDecl typedef)
{
throw new NotImplementedException();
}
public virtual bool VisitTypeAliasDecl(TypeAlias typeAlias)
{
throw new NotImplementedException();
}
public virtual bool VisitEnumDecl(Enumeration @enum)
{
throw new NotImplementedException();
}
public virtual bool VisitEnumItemDecl(Enumeration.Item item)
{
throw new NotImplementedException();
}
public virtual bool VisitVariableDecl(Variable variable)
{
throw new NotImplementedException();
}
public virtual bool VisitMacroDefinition(MacroDefinition macro)
{
throw new NotImplementedException();
}
public virtual bool VisitNamespace(Namespace @namespace)
{
return VisitDeclContext(@namespace);
}
public virtual bool VisitEvent(Event @event)
{
throw new NotImplementedException();
}
public virtual bool VisitProperty(Property property)
{
throw new NotImplementedException();
}
public virtual bool VisitFriend(Friend friend)
{
throw new NotImplementedException();
}
public virtual bool VisitClassTemplateDecl(ClassTemplate template)
{
throw new NotImplementedException();
}
public virtual bool VisitClassTemplateSpecializationDecl(ClassTemplateSpecialization specialization)
{
return VisitClassDecl(specialization);
}
public virtual bool VisitFunctionTemplateDecl(FunctionTemplate template)
{
throw new NotImplementedException();
}
public virtual bool VisitFunctionTemplateSpecializationDecl(FunctionTemplateSpecialization specialization)
{
throw new NotImplementedException();
}
public virtual bool VisitVarTemplateDecl(VarTemplate template)
{
throw new NotImplementedException();
}
public virtual bool VisitVarTemplateSpecializationDecl(VarTemplateSpecialization template)
{
throw new NotImplementedException();
}
public virtual bool VisitTemplateTemplateParameterDecl(TemplateTemplateParameter templateTemplateParameter)
{
throw new NotImplementedException();
}
public virtual bool VisitTemplateParameterDecl(TypeTemplateParameter templateParameter)
{
throw new NotImplementedException();
}
public virtual bool VisitNonTypeTemplateParameterDecl(NonTypeTemplateParameter nonTypeTemplateParameter)
{
throw new NotImplementedException();
}
public virtual bool VisitTypeAliasTemplateDecl(TypeAliasTemplate typeAliasTemplate)
{
throw new NotImplementedException();
}
#endregion
}
}