public CodeWriter GenerateOpenGLFunction( Function function, IList<TypeMap> typeMapList, IList<CSTypeMap> csTypeMapList, IList<EnumData> enumDatas ) { var writer = new CodeWriter(); writer.Indent = 0; writer.Append( "[DllImport( \"opengl32.dll\", EntryPoint=\"gl" ); writer.AppendText( function.Name ); writer.Indent = 0; writer.AppendLine( "\" )]" ); writer.Append( "public static extern " ); if (function.IsUnsafeMethod(typeMapList, csTypeMapList)){ writer.Indent = 0; writer.Append( "unsafe " ); } writer.AppendText( function.Return.GetCSName( typeMapList, csTypeMapList, enumDatas ) ); writer.Indent = 0; writer.Append( " " ); writer.AppendText( function.Name ); writer.Indent = 0; writer.Append( "( " ); { var list = new List<CodeWriter>(); CodeWriter temp; foreach (var item in function.ParamList) { temp = this.Invoke( "GenerateParam", item, typeMapList, csTypeMapList, enumDatas ); list.Add( temp ); } writer.AppendType = AppendType.EmptyLastLine; for (var listI = 0; listI < list.Count; listI++) { var codeWriter = list[listI]; writer.Append( codeWriter ); if (listI < list.Count - 1) writer.AppendText( ", " ); } writer.AppendType = AppendType.EmptyLastLine; } writer.Indent = 0; writer.Append( " ); // " ); if (function.Contains( "extension" )){ writer.Indent = 0; writer.Append( " extension method" ); } writer.Indent = 0; writer.AppendLine(); writer.Indent = 1; return writer; }
public CodeWriter GenerateDelegateFunction( Function function, IList<TypeMap> typeMapList, IList<CSTypeMap> csTypeMapList, IList<EnumData> enumDatas ) { var writer = new CodeWriter(); writer.Indent = 0; writer.Append( "public " ); if (function.IsUnsafeMethod(typeMapList, csTypeMapList)){ writer.Indent = 0; writer.Append( "unsafe " ); } writer.Indent = 0; writer.Append( "delegate " ); writer.AppendText( function.Return.GetCSName( typeMapList, csTypeMapList, enumDatas ) ); writer.Indent = 0; writer.Append( " " ); writer.AppendText( function.Name ); writer.Indent = 0; writer.Append( "Delegate( " ); { var list = new List<CodeWriter>(); CodeWriter temp; foreach (var item in function.ParamList) { temp = this.Invoke( "GenerateParam", item, typeMapList, csTypeMapList, enumDatas ); list.Add( temp ); } writer.AppendType = AppendType.EmptyLastLine; for (var listI = 0; listI < list.Count; listI++) { var codeWriter = list[listI]; writer.Append( codeWriter ); if (listI < list.Count - 1) writer.AppendText( ", " ); } writer.AppendType = AppendType.EmptyLastLine; } writer.Indent = 0; writer.Append( " ); // " ); if (function.Contains( "extension" )){ writer.Indent = 0; writer.Append( " extension method" ); } writer.Indent = 0; writer.AppendLine(); writer.AppendLine(); writer.Append( "private static " ); writer.AppendText( function.Name ); writer.Indent = 0; writer.Append( "Delegate _" ); writer.AppendText( function.Name ); writer.Indent = 0; writer.AppendLine( ";" ); writer.AppendLine(); writer.Append( "public static " ); if (function.IsUnsafeMethod(typeMapList, csTypeMapList)){ writer.Indent = 0; writer.Append( "unsafe " ); } writer.Indent = 0; writer.Append( " " ); writer.AppendText( function.Return.GetCSName( typeMapList, csTypeMapList, enumDatas ) ); writer.Indent = 0; writer.Append( " " ); writer.AppendText( function.Name ); writer.Indent = 0; writer.Append( "( " ); { var list = new List<CodeWriter>(); CodeWriter temp; foreach (var item in function.ParamList) { temp = this.Invoke( "GenerateParam", item, typeMapList, csTypeMapList, enumDatas ); list.Add( temp ); } writer.AppendType = AppendType.EmptyLastLine; for (var listI = 0; listI < list.Count; listI++) { var codeWriter = list[listI]; writer.Append( codeWriter ); if (listI < list.Count - 1) writer.AppendText( ", " ); } writer.AppendType = AppendType.EmptyLastLine; } writer.Indent = 0; writer.AppendLine( " )" ); writer.AppendLine( "{" ); writer.Indent = 1; writer.Append( "if (_" ); writer.AppendText( function.Name ); writer.Indent = 0; writer.Append( " == null) throw new Exception( \"Extension method " ); writer.AppendText( function.Name ); writer.Indent = 0; writer.AppendLine( " not found\" );" ); writer.Indent = 1; if (function.Return.ReturnType != "void"){ writer.Indent = 0; writer.Append( "return " ); } writer.Indent = 0; writer.Append( " _" ); writer.AppendText( function.Name ); writer.Indent = 0; writer.Append( "( " ); { var list = new List<CodeWriter>(); CodeWriter temp; foreach (var item in function.ParamList) { temp = this.Invoke( "GenerateParamName", item, typeMapList, csTypeMapList, enumDatas ); list.Add( temp ); } writer.AppendType = AppendType.EmptyLastLine; for (var listI = 0; listI < list.Count; listI++) { var codeWriter = list[listI]; writer.Append( codeWriter ); if (listI < list.Count - 1) writer.AppendText( ", " ); } writer.AppendType = AppendType.EmptyLastLine; } writer.Indent = 0; writer.AppendLine( " );" ); writer.Append( "}" ); return writer; }