This commit is contained in:
Garry Newman 2016-10-29 13:02:36 +01:00
parent ba06bce930
commit 9e14aff459
7 changed files with 121 additions and 106 deletions

View File

@ -11,9 +11,9 @@ class Argument
public string Name;
public string NativeType;
public string ManagedType;
public TypeDef TypeDef;
public CodeWriter.TypeDef TypeDef;
public Argument( string Name, string ManagedType, Dictionary<string, TypeDef> typeDefs )
public Argument( string Name, string ManagedType, Dictionary<string, CodeWriter.TypeDef> typeDefs )
{
this.Name = Name;
this.NativeType = ManagedType;
@ -21,7 +21,7 @@ public Argument( string Name, string ManagedType, Dictionary<string, TypeDef> ty
Build( typeDefs );
}
private void Build( Dictionary<string, TypeDef> typeDefs )
private void Build( Dictionary<string, CodeWriter.TypeDef> typeDefs )
{
var cleanNative = NativeType.Trim( '*', ' ' ).Replace( "class ", "" ).Replace( "const ", "" );

View File

@ -19,7 +19,7 @@ public partial class CodeWriter
//
// Output a class into a file
//
void Class( string FileName )
void GenerateClasses( string FileName )
{
foreach ( var g in def.methods.GroupBy( x => x.ClassName ) )
{

View File

@ -10,11 +10,8 @@ namespace Generator
{
public partial class CodeWriter
{
private StringBuilder sb = new StringBuilder();
private SteamApiDefinition def;
private Dictionary<string, TypeDef> TypeDefs = new Dictionary<string, TypeDef>();
public CodeWriter( SteamApiDefinition def )
{
this.def = def;
@ -265,7 +262,7 @@ public void ToFolder( string folder )
}
{
Class( $"{folder}SteamNative." );
GenerateClasses( $"{folder}SteamNative." );
}
}
@ -296,50 +293,6 @@ void WorkoutTypes()
}
}
private string ToManagedType( string type )
{
type = type.Replace( "ISteamHTMLSurface::", "" );
type = type.Replace( "class ", "" );
type = type.Replace( "struct ", "" );
type = type.Replace( "const void", "void" );
type = type.Replace( "union ", "" );
type = type.Replace( "enum ", "" );
switch ( type )
{
case "uint64": return "ulong";
case "uint32": return "uint";
case "int32": return "int";
case "int64": return "long";
case "void *": return "IntPtr";
case "uint8 *": return "IntPtr";
case "int16": return "short";
case "uint8": return "byte";
case "int8": return "char";
case "unsigned short": return "ushort";
case "unsigned int": return "uint";
case "uint16": return "ushort";
case "const char *": return "string";
case "_Bool": return "bool";
case "CSteamID": return "ulong";
case "SteamAPIWarningMessageHook_t": return "IntPtr";
}
//type = type.Trim( '*', ' ' );
// Enums - skip the 'E'
if ( type[0] == 'E' )
{
return type.Substring( 1 );
}
if ( type.StartsWith( "ISteamMatchmak" ) && type.Contains( "Response" ) )
return "IntPtr";
return type;
}
private List<Argument> BuildArguments( SteamApiDefinition.MethodDef.ParamType[] ps )
{
var args = new List<Argument>();
@ -354,51 +307,6 @@ private List<Argument> BuildArguments( SteamApiDefinition.MethodDef.ParamType[]
return args;
}
private int indent = 0;
public string Indent { get { return new string( '\t', indent ); } }
private void EndBlock( string end = "" )
{
indent--;
sb.AppendLine( $"{Indent}}}{end}" );
}
private void WriteLine( string v = "" )
{
sb.AppendLine( $"{Indent}{v}" );
}
private void StartBlock( string v )
{
sb.AppendLine( $"{Indent}{v}" );
sb.AppendLine( $"{Indent}{{" );
indent++;
}
private void WriteLines( List<string> beforeLines )
{
foreach ( var line in beforeLines )
{
if ( line == "}" )
indent--;
WriteLine( line );
if ( line == "{" )
indent++;
}
}
private void Footer()
{
EndBlock();
}
private void Header()
{
WriteLine( "using System;" );
@ -406,13 +314,10 @@ private void Header()
WriteLine();
StartBlock( "namespace SteamNative" );
}
private void Footer()
{
EndBlock();
}
}
}
class TypeDef
{
public string Name;
public string NativeType;
public string ManagedType;
}

View File

@ -8,6 +8,15 @@ namespace Generator
{
public partial class CodeWriter
{
public class TypeDef
{
public string Name;
public string NativeType;
public string ManagedType;
}
private Dictionary<string, TypeDef> TypeDefs = new Dictionary<string, TypeDef>();
//
// Don't give a fuck about these classes, they just cause us trouble
//

View File

@ -57,5 +57,50 @@ string CleanMemberName( string m )
return cleanName.Substring( 0, 1 ).ToUpper() + cleanName.Substring( 1 );
}
private string ToManagedType( string type )
{
type = type.Replace( "ISteamHTMLSurface::", "" );
type = type.Replace( "class ", "" );
type = type.Replace( "struct ", "" );
type = type.Replace( "const void", "void" );
type = type.Replace( "union ", "" );
type = type.Replace( "enum ", "" );
switch ( type )
{
case "uint64": return "ulong";
case "uint32": return "uint";
case "int32": return "int";
case "int64": return "long";
case "void *": return "IntPtr";
case "uint8 *": return "IntPtr";
case "int16": return "short";
case "uint8": return "byte";
case "int8": return "char";
case "unsigned short": return "ushort";
case "unsigned int": return "uint";
case "uint16": return "ushort";
case "const char *": return "string";
case "_Bool": return "bool";
case "CSteamID": return "ulong";
case "SteamAPIWarningMessageHook_t": return "IntPtr";
}
//type = type.Trim( '*', ' ' );
// Enums - skip the 'E'
if ( type[0] == 'E' )
{
return type.Substring( 1 );
}
if ( type.StartsWith( "ISteamMatchmak" ) && type.Contains( "Response" ) )
return "IntPtr";
return type;
}
}
}

View File

@ -0,0 +1,55 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Generator;
namespace Generator
{
public partial class CodeWriter
{
private StringBuilder sb = new StringBuilder();
private int indent = 0;
public string Indent { get { return new string( '\t', indent ); } }
private void EndBlock( string end = "" )
{
indent--;
sb.AppendLine( $"{Indent}}}{end}" );
}
private void WriteLine( string v = "" )
{
sb.AppendLine( $"{Indent}{v}" );
}
private void StartBlock( string v )
{
sb.AppendLine( $"{Indent}{v}" );
sb.AppendLine( $"{Indent}{{" );
indent++;
}
private void WriteLines( List<string> beforeLines )
{
foreach ( var line in beforeLines )
{
if ( line == "}" )
indent--;
WriteLine( line );
if ( line == "{" )
indent++;
}
}
}
}

View File

@ -49,7 +49,8 @@
<ItemGroup>
<Compile Include="Argument.cs" />
<Compile Include="CodeWriter\Class.cs" />
<Compile Include="CodeWriter.cs" />
<Compile Include="CodeWriter\Writing.cs" />
<Compile Include="CodeWriter\CodeWriter.cs" />
<Compile Include="CodeWriter\Enums.cs" />
<Compile Include="CodeWriter\Struct.cs" />
<Compile Include="CodeWriter\Types.cs" />