Add testcase for %attributestring on shared_ptr

This commit is contained in:
William S Fulton 2014-01-11 13:15:44 +00:00
parent c34d7f6d23
commit 07ce3fb746
4 changed files with 89 additions and 1 deletions

View File

@ -245,6 +245,7 @@ CPP_TEST_CASES += \
li_boost_shared_ptr \
li_boost_shared_ptr_bits \
li_boost_shared_ptr_template \
li_boost_shared_ptr_attribute \
li_carrays \
li_cdata \
li_cpointer \

View File

@ -0,0 +1,38 @@
import li_boost_shared_ptr_attribute.*;
public class li_boost_shared_ptr_attribute_runme {
static {
try {
System.loadLibrary("li_boost_shared_ptr_attribute");
} catch (UnsatisfiedLinkError e) {
System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e);
System.exit(1);
}
}
public static void check(GetSetMe g, int expected) {
int got = g.getN();
if (got != expected)
throw new RuntimeException("GetSetMe value is " + got + " but should be " + expected);
}
public static void check(GetMe g, int expected) {
int got = g.getN();
if (got != expected)
throw new RuntimeException("GetMe value is " + got + " but should be " + expected);
}
public static void main(String argv[])
{
GetterSetter gs = new GetterSetter(5);
check(gs.getMyval(), 25);
check(gs.getAddedAttrib(), 25);
gs.setAddedAttrib(new GetSetMe(6));
check(gs.getMyval(), 6);
check(gs.getAddedAttrib(), 6);
GetterOnly g = new GetterOnly(4);
check(g.getMyval(), 16);
check(g.getAddedAttrib(), 16);
}
}

View File

@ -0,0 +1,46 @@
%module li_boost_shared_ptr_attribute
#if defined(SWIGJAVA) || defined(SWIGCSHARP) || defined(SWIGPYTHON) || defined(SWIGD)
#define SHARED_PTR_WRAPPERS_IMPLEMENTED
#endif
#if defined(SHARED_PTR_WRAPPERS_IMPLEMENTED)
%include "attribute.i"
%include "boost_shared_ptr.i"
%inline %{
#include <boost/shared_ptr.hpp>
using namespace boost;
%}
%shared_ptr(GetMe);
%shared_ptr(GetSetMe);
%attributestring(GetterOnly, shared_ptr<GetMe>, AddedAttrib, GetIt)
%attributestring(GetterSetter, shared_ptr<GetSetMe>, AddedAttrib, GetIt, SetIt)
%inline %{
struct GetMe {
explicit GetMe(int n) : n(n) {}
~GetMe() {}
int n;
};
struct GetSetMe {
explicit GetSetMe(int n) : n(n) {}
~GetSetMe() {}
int n;
};
struct GetterOnly {
explicit GetterOnly(int n) : myval(new GetMe(n*n)) {}
shared_ptr<GetMe> GetIt() const { return myval; }
shared_ptr<GetMe> myval;
};
struct GetterSetter {
explicit GetterSetter(int n) : myval(new GetSetMe(n*n)) {}
shared_ptr<GetSetMe> GetIt() const { return myval; }
void SetIt(shared_ptr<GetSetMe> newval) { myval = newval; }
shared_ptr<GetSetMe> myval;
};
%}
#endif

View File

@ -130,6 +130,9 @@
};
%}
The %attributestring also works for class types that have %naturalvar turned
on and so is also useful for shared_ptr which has %naturalvar turned on in %shared_ptr.
*/
//
@ -275,7 +278,7 @@
%ignore Class::GetMethod();
%ignore Class::GetMethod() const;
%newobject Class::AttributeName;
%typemap(newfree) const AttributeType &AttributeName "delete $1;// my newfree override"
%typemap(newfree) const AttributeType &AttributeName "delete $1;"
%extend Class {
AttributeType AttributeName;
}