summaryrefslogtreecommitdiffstats
path: root/swig
diff options
context:
space:
mode:
authorEmmanuel Raviart <eraviart@entrouvert.com>2005-01-19 21:12:33 +0000
committerEmmanuel Raviart <eraviart@entrouvert.com>2005-01-19 21:12:33 +0000
commit82aebdd0afcb4110fe6ca1ce9c38434a264013f3 (patch)
treed67decf7347f75f5e48da3e6b87049e09d65fa84 /swig
parent979dda50ed08dd29b90b0b40fe4f9e9aafd59ddb (diff)
downloadlasso-82aebdd0afcb4110fe6ca1ce9c38434a264013f3.tar.gz
lasso-82aebdd0afcb4110fe6ca1ce9c38434a264013f3.tar.xz
lasso-82aebdd0afcb4110fe6ca1ce9c38434a264013f3.zip
Improved C# binding.
Diffstat (limited to 'swig')
-rw-r--r--swig/Lasso.i143
1 files changed, 133 insertions, 10 deletions
diff --git a/swig/Lasso.i b/swig/Lasso.i
index 6c91d034..68c440a0 100644
--- a/swig/Lasso.i
+++ b/swig/Lasso.i
@@ -260,17 +260,109 @@ static void build_exception_msg(int errorCode, char *errorMsg) {
***********************************************************************/
-#if defined(SWIGCSHARP) || defined(SWIGJAVA)
+/***********************************************************************
+ * C# Dynamic Casting
+ ***********************************************************************/
+
+
+#ifdef SWIGCSHARP
+
+/* Accept LassoNode subclasses as input argument, when a LassoNode is expected. */
+
+%typemap(csbody) DowncastableNode %{
+ protected IntPtr swigCPtr;
+ protected bool swigCMemOwn;
+
+ internal $csclassname(IntPtr cPtr, bool cMemoryOwn) {
+ swigCMemOwn = cMemoryOwn;
+ swigCPtr = cPtr;
+ }
+
+ protected static IntPtr getCPtr($csclassname obj) {
+ return (obj == null) ? IntPtr.Zero : obj.swigCPtr;
+ }
+%}
+
+%typemap(csbody) NODE_SUBCLASS %{
+ internal $csclassname(IntPtr cPtr, bool cMemoryOwn) {
+ swigCMemOwn = cMemoryOwn;
+ swigCPtr = cPtr;
+ }
+
+ protected static IntPtr getCPtr($csclassname obj) {
+ return (obj == null) ? IntPtr.Zero : obj.swigCPtr;
+ }
+%}
+
+%typemap(csdestruct, methodname="Dispose") NODE_SUBCLASS {
+ base.Dispose();
+}
+
+/* Dynamically downcast to a LassoNode subclass, when a LassoNode is expected as a result. */
+
+%typemap(out) DowncastableNode * {
+/* FIXME */
+/* char classPath[256]; */
+/* jclass clazz; */
+/* char *name; */
+
+/* name = (char *) G_OBJECT_TYPE_NAME($1); */
+/* name += 5; /\* Skip "Lasso" prefix. *\/ */
+/* sprintf(classPath, "com/entrouvert/lasso/%s", name); */
+/* clazz = (*jenv)->FindClass(jenv, classPath); */
+/* if (clazz) { */
+/* jmethodID mid = (*jenv)->GetMethodID(jenv, clazz, "<init>", "(JZ)V"); */
+/* if (mid) */
+/* *(void**)&$result = (*jenv)->NewObject(jenv, clazz, mid, $1, false); */
+/* } */
+}
+
+%typemap(csout) DowncastableNode * {
+ return $imcall;
+}
+
+%typemap(ctype) DowncastableNode * "void *"
+%typemap(imtype) DowncastableNode * "DowncastableNode"
+%typemap(cstype) DowncastableNode * "DowncastableNode"
+
+%{
+
+typedef struct {
+} DowncastableNode;
+
+DowncastableNode *downcast_node(LassoNode *node) {
+ return (DowncastableNode *) node;
+}
+
+%}
+
+%nodefault DowncastableNode;
+typedef struct {
+} DowncastableNode;
+
+DowncastableNode *downcast_node(LassoNode *node); // FIXME: Replace with LassoNode.
+
+%typemap(csout) NODE_SUPERCLASS * {
+ IntPtr cPtr = $imcall;
+ return (cPtr == IntPtr.Zero) ? null : ($csclassname) lassoPINVOKE.downcast_node(cPtr);
+}
+
+%apply NODE_SUPERCLASS * {LassoNode *, LassoSamlpRequestAbstract *,
+ LassoSamlpResponseAbstract *};
+
+#else /* ifndef SWIGCSHARP */
/***********************************************************************
- * C# & Java Dynamic Casting
+ * Java Dynamic Casting
***********************************************************************/
+#ifdef SWIGJAVA
+
/* Accept LassoNode subclasses as input argument, when a LassoNode is expected. */
-%typemap(javabody) LassoNode %{
+%typemap(javabody) DowncastableNode %{
protected long swigCPtr;
protected boolean swigCMemOwn;
@@ -294,6 +386,10 @@ static void build_exception_msg(int errorCode, char *errorMsg) {
}
%}
+%typemap(javadestruct, methodname="delete") NODE_SUBCLASS {
+ super.delete();
+}
+
/* Dynamically downcast to a LassoNode subclass, when a LassoNode is expected as a result. */
%typemap(out) DowncastableNode * {
@@ -345,14 +441,14 @@ DowncastableNode *downcast_node(LassoNode *node); // FIXME: Replace with LassoNo
%apply NODE_SUPERCLASS * {LassoNode *, LassoSamlpRequestAbstract *,
LassoSamlpResponseAbstract *};
-#else /* if !defined(SWIGCSHARP) && !defined(SWIGJAVA) */
-
/***********************************************************************
* Perl, PHP & Python Dynamic Casting
***********************************************************************/
+#else /* ifndef SWIGJAVA */
+
%{
typedef struct node_info {
@@ -475,7 +571,8 @@ DYNAMIC_CAST(SWIGTYPE_p_LassoNode, dynamic_cast_node);
DYNAMIC_CAST(SWIGTYPE_p_LassoSamlpRequestAbstract, dynamic_cast_node);
DYNAMIC_CAST(SWIGTYPE_p_LassoSamlpResponseAbstract, dynamic_cast_node);
-#endif /* if !defined(SWIGCSHARP) && !defined(SWIGJAVA) */
+#endif /* ifndef SWIGJAVA */
+#endif /* ifndef SWIGCSHARP */
/***********************************************************************
@@ -483,7 +580,21 @@ DYNAMIC_CAST(SWIGTYPE_p_LassoSamlpResponseAbstract, dynamic_cast_node);
***********************************************************************/
-#if defined(SWIGCSHARP) || defined(SWIGJAVA)
+#ifdef SWIGCSHARP
+
+%define SET_NODE_INFO(className, superClassName)
+%apply NODE_SUBCLASS {Lasso##className};
+%typemap(csbase) Lasso##className #superClassName;
+%enddef
+
+%typemap(csbase) LassoNode "DowncastableNode";
+
+SET_NODE_INFO(Node, DowncastableNode)
+%include inheritance.h
+
+#else /* ifndef SWIGCSHARP */
+
+#ifdef SWIGJAVA
%define SET_NODE_INFO(className, superClassName)
%apply NODE_SUBCLASS {Lasso##className};
@@ -492,9 +603,10 @@ DYNAMIC_CAST(SWIGTYPE_p_LassoSamlpResponseAbstract, dynamic_cast_node);
%typemap(javabase) LassoNode "DowncastableNode";
+SET_NODE_INFO(Node, DowncastableNode)
%include inheritance.h
-#else /* if !defined(SWIGCSHARP) && !defined(SWIGJAVA) */
+#else /* ifndef SWIGJAVA */
%init %{
{ /* Brace needed for pre-C99 compilers */
@@ -520,7 +632,8 @@ DYNAMIC_CAST(SWIGTYPE_p_LassoSamlpResponseAbstract, dynamic_cast_node);
}
%}
-#endif /* if !defined(SWIGCSHARP) && !defined(SWIGJAVA) */
+#endif /* ifndef SWIGJAVA */
+#endif /* ifndef SWIGCSHARP */
/***********************************************************************
@@ -1060,6 +1173,15 @@ static void set_xml_list(GList **xmlListPointer, GPtrArray *xmlArray) {
***********************************************************************/
+#ifdef SWIGCSHARP
+%pragma(csharp) imclasscode=%{
+/* FIXME: Doesn't work for C# */
+/* static { */
+/* // Initialize Lasso. */
+/* init(); */
+/* } */
+%}
+#else /* ifndef SWIGCSHARP */
#ifdef SWIGJAVA
#if SWIG_VERSION >= 0x010322
%include "enumsimple.swg"
@@ -1091,7 +1213,8 @@ static void set_xml_list(GList **xmlListPointer, GPtrArray *xmlArray) {
lasso_init();
%}
#endif
-#endif
+#endif /* ifndef SWIGJAVA */
+#endif /* ifndef SWIGCSHARP */
/***********************************************************************