mirror of https://github.com/swig/swig
Add testcase for %attributestring on shared_ptr
This commit is contained in:
parent
c34d7f6d23
commit
07ce3fb746
|
@ -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 \
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue