From 9f9ba96e8edebc555ae53c2d073ee8ae2fb8a25a Mon Sep 17 00:00:00 2001 From: William S Fulton Date: Tue, 24 Feb 2004 21:05:48 +0000 Subject: [PATCH] New commandline option -namespace for putting all generated classes into a C# namespace. git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@5739 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- SWIG/Doc/Manual/CSharp.html | 4 +++ SWIG/Lib/csharp/csharp.swg | 2 +- SWIG/Source/Modules/csharp.cxx | 55 ++++++++++++++++++++-------------- 3 files changed, 37 insertions(+), 24 deletions(-) diff --git a/SWIG/Doc/Manual/CSharp.html b/SWIG/Doc/Manual/CSharp.html index 506adb1e4..15bf8d5fc 100644 --- a/SWIG/Doc/Manual/CSharp.html +++ b/SWIG/Doc/Manual/CSharp.html @@ -39,6 +39,10 @@ The most noteable differences to Java are the following: When invoking SWIG use the -csharp command line option instead of -java. +
  • +The -package command line option does not exist. The -namespace <name> commandline option will generate all code into the namespace specified by <name>. +
  • +
  • C/C++ variables are wrapped with C# properties and not JavaBean style getters and setters.
  • diff --git a/SWIG/Lib/csharp/csharp.swg b/SWIG/Lib/csharp/csharp.swg index 1305521cf..6e3063a6e 100644 --- a/SWIG/Lib/csharp/csharp.swg +++ b/SWIG/Lib/csharp/csharp.swg @@ -412,7 +412,7 @@ $1 = &temp; %} %typemap(csbase) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) "" %typemap(csclassmodifiers) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) "public" %typemap(cscode) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) "" -%typemap(csimports) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) "using System;" +%typemap(csimports) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) "\nusing System;\n" %typemap(csinterfaces) SWIGTYPE "IDisposable" %typemap(csinterfaces_derived) SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) "" %typemap(csptrconstructormodifiers) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) "internal" diff --git a/SWIG/Source/Modules/csharp.cxx b/SWIG/Source/Modules/csharp.cxx index 84ee4b302..a754c8bfe 100644 --- a/SWIG/Source/Modules/csharp.cxx +++ b/SWIG/Source/Modules/csharp.cxx @@ -47,7 +47,7 @@ class CSHARP : public Language { String *variable_name; //Name of a variable being wrapped String *proxy_class_constants_code; String *module_class_constants_code; - String *package; // Package name + String *namespce; // Optional namespace name String *imclass_imports; //intermediary class imports from %pragma String *module_imports; //module imports from %pragma String *imclass_baseclass; //inheritance for intermediary class class from %pragma @@ -98,7 +98,7 @@ class CSHARP : public Language { variable_name(NULL), proxy_class_constants_code(NULL), module_class_constants_code(NULL), - package(NULL), + namespce(NULL), imclass_imports(NULL), module_imports(NULL), imclass_baseclass(NULL), @@ -142,10 +142,10 @@ class CSHARP : public Language { // Look for certain command line options for (int i = 1; i < argc; i++) { if (argv[i]) { - if (strcmp(argv[i],"-package") == 0) { + if (strcmp(argv[i],"-namespace") == 0) { if (argv[i+1]) { - package = NewString(""); - Printf(package, argv[i+1]); + namespce = NewString(""); + Printf(namespce, argv[i+1]); Swig_mark_arg(i); Swig_mark_arg(i+1); i++; @@ -219,7 +219,7 @@ class CSHARP : public Language { module_class_constants_code = NewString(""); imclass_baseclass = NewString(""); imclass_interfaces = NewString(""); - imclass_class_modifiers = NewString(""); // package access only to the intermediary class by default + imclass_class_modifiers = NewString(""); module_class_code = NewString(""); module_baseclass = NewString(""); module_interfaces = NewString(""); @@ -228,7 +228,7 @@ class CSHARP : public Language { imclass_imports = NewString(""); imclass_cppcasts_code = NewString(""); upcasts_code = NewString(""); - if (!package) package = NewString(""); + if (!namespce) namespce = NewString(""); Swig_banner(f_runtime); // Print the SWIG banner message @@ -263,11 +263,12 @@ class CSHARP : public Language { } Delete(filen); filen = NULL; - // Start writing out the intermediary class - if(Len(package) > 0) - Printf(f_im, "//package %s;\n\n", package); - + // Start writing out the intermediary class file emitBanner(f_im); + + if(Len(namespce) > 0) + Printf(f_im, "namespace %s {\n", namespce); + if(imclass_imports) Printf(f_im, "%s\n", imclass_imports); @@ -288,6 +289,7 @@ class CSHARP : public Language { // Finish off the class Printf(f_im, "}\n"); + Printf(f_im, Len(namespce) > 0 ? "\n}\n" : ""); Close(f_im); } @@ -301,11 +303,12 @@ class CSHARP : public Language { } Delete(filen); filen = NULL; - // Start writing out the module class - if(Len(package) > 0) - Printf(f_module, "//package %s;\n\n", package); - + // Start writing out the module class file emitBanner(f_module); + + if(Len(namespce) > 0) + Printf(f_module, "namespace %s {\n", namespce); + if(module_imports) Printf(f_module, "%s\n", module_imports); @@ -328,6 +331,7 @@ class CSHARP : public Language { // Finish off the class Printf(f_module, "}\n"); + Printf(f_module, Len(namespce) > 0 ? "\n}\n" : ""); Close(f_module); } @@ -361,7 +365,7 @@ class CSHARP : public Language { Delete(imclass_imports); imclass_imports = NULL; Delete(imclass_cppcasts_code); imclass_cppcasts_code = NULL; Delete(upcasts_code); upcasts_code = NULL; - Delete(package); package = NULL; + Delete(namespce); namespce = NULL; /* Close all of the files */ Dump(f_header,f_runtime); @@ -1139,10 +1143,11 @@ class CSHARP : public Language { } Delete(filen); filen = NULL; + // Start writing out the proxy class file emitBanner(f_proxy); - if(Len(package) > 0) - Printf(f_proxy, "//package %s;\n\n", package); + if(Len(namespce) > 0) + Printf(f_proxy, "namespace %s {\n", namespce); Clear(proxy_class_def); Clear(proxy_class_code); @@ -1164,6 +1169,7 @@ class CSHARP : public Language { Printv(f_proxy, " // enums and constants\n", proxy_class_constants_code, NIL); Printf(f_proxy, "}\n"); + Printf(f_proxy, Len(namespce) > 0 ? "\n}\n" : ""); Close(f_proxy); f_proxy = NULL; @@ -1894,10 +1900,11 @@ class CSHARP : public Language { } Delete(filen); filen = NULL; - // Emit banner and package name + // Start writing out the type wrapper class file emitBanner(f_swigtype); - if(Len(package) > 0) - Printf(f_swigtype, "//package %s;\n\n", package); + + if(Len(namespce) > 0) + Printf(f_swigtype, "namespace %s {\n", namespce); // Pure C# baseclass and interfaces const String *pure_baseclass = typemapLookup("csbase", type, WARN_NONE); @@ -1932,7 +1939,9 @@ class CSHARP : public Language { typemapLookup("csgetcptr", type, WARN_CSHARP_TYPEMAP_GETCPTR_UNDEF), // getCPtr method typemapLookup("cscode", type, WARN_NONE), // extra C# code "}\n", - "\n", + Len(namespce) > 0 ? + "\n}\n" : + "", NIL); Replaceall(swigtype, "$csclassname", classname); @@ -2046,7 +2055,7 @@ extern "C" Language * swig_csharp(void) { const char *CSHARP::usage = (char*)"\ C# Options (available with -csharp)\n\ - -package - set name of the assembly to \n\ + -namespace - Generate wrappers into C# namespace \n\ -noproxy - Generate the low-level functional interface instead\n\ of proxy classes\n\ \n";