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.
 
 
 
 
 

102 lines
1.6 KiB

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
namespace Cxxi
{
public enum CppAbi
{
Itanium,
Microsoft,
ARM
}
public enum InlineMethods
{
Present,
Unavailable
}
[DebuggerDisplay("File = {FileName}, Ignored = {Ignore}")]
public class Module
{
public Module(string File)
{
Global = new Namespace();
Macros = new List<MacroDefine>();
Namespaces = new List<Namespace>();
FilePath = File;
Ignore = false;
}
public bool Ignore;
public string FilePath;
public string FileName
{
get { return Path.GetFileName(FilePath); }
}
public List<MacroDefine> Macros;
public Namespace Global;
public List<Namespace> Namespaces;
public bool HasDeclarations
{
get
{
return Global.HasDeclarations
|| Namespaces.Exists(n => n.HasDeclarations);
}
}
}
public class Library
{
public Library(string name)
{
Name = name;
Modules = new List<Module>();
}
public Module FindOrCreateModule(string File)
{
var module = Modules.Find(m => m.FilePath.Equals(File));
if (module == null)
{
module = new Module(File);
Modules.Add(module);
}
return module;
}
public Enumeration FindEnum(string Name)
{
foreach (var module in Modules)
{
var type = module.Global.FindEnum(Name);
if (type != null) return type;
}
return null;
}
public Class FindClass(string Name)
{
foreach (var module in Modules)
{
var type = module.Global.FindClass(Name);
if (type != null) return type;
}
return null;
}
public string Name { get; set; }
public List<Module> Modules { get; set; }
}
}