diff --git a/wrap/tests/expected/@Point2/Point2.m b/wrap/tests/expected/@Point2/Point2.m index 454d81399..68744ae00 100644 --- a/wrap/tests/expected/@Point2/Point2.m +++ b/wrap/tests/expected/@Point2/Point2.m @@ -5,12 +5,16 @@ classdef Point2 < handle end methods function obj = Point2(varargin) - if (nargin == 0), obj.self = new_Point2_(); end - if (nargin == 2 && isa(varargin{1},'double') && isa(varargin{2},'double')), obj.self = new_Point2_dd(varargin{1},varargin{2}); end - if nargin ~= 13 && obj.self == 0, error('Point2 constructor failed'); end + if (nargin == 0), obj.self = new_Point2_(0,0); end + if (nargin == 2 && isa(varargin{1},'double') && isa(varargin{2},'double')), obj.self = new_Point2_(0,1,varargin{1},varargin{2}); end + if nargin ==14, new_Point2_(varargin{1},0); end + if nargin ~= 13 && nargin ~= 14 && obj.self == 0, error('Point2 constructor failed'); end end function delete(obj) - delete_Point2(obj); + if obj.self ~= 0 + new_Point2_(obj.self); + obj.self = 0; + end end function display(obj), obj.print(''); end function disp(obj), obj.display; end diff --git a/wrap/tests/expected/@Point2/argChar.cpp b/wrap/tests/expected/@Point2/argChar.cpp index 18548ee8f..e5fac45fe 100644 --- a/wrap/tests/expected/@Point2/argChar.cpp +++ b/wrap/tests/expected/@Point2/argChar.cpp @@ -1,10 +1,14 @@ // automatically generated by wrap #include +#include #include +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("argChar",nargout,nargin-1,1); - boost::shared_ptr self = unwrap_shared_ptr< Point2 >(in[0],"Point2"); - char a = unwrap< char >(in[1]); - self->argChar(a); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; + char a = unwrap< char >(in[1]); + obj->argChar(a); } diff --git a/wrap/tests/expected/@Point2/argChar.m b/wrap/tests/expected/@Point2/argChar.m index 93880c5b1..6c935a1d6 100644 --- a/wrap/tests/expected/@Point2/argChar.m +++ b/wrap/tests/expected/@Point2/argChar.m @@ -1,5 +1,4 @@ -% automatically generated by wrap +% result = obj.argChar(a) function result = argChar(obj,a) -% usage: obj.argChar(a) error('need to compile argChar.cpp'); end diff --git a/wrap/tests/expected/@Point2/argUChar.cpp b/wrap/tests/expected/@Point2/argUChar.cpp index bbaa65a8f..54c592915 100644 --- a/wrap/tests/expected/@Point2/argUChar.cpp +++ b/wrap/tests/expected/@Point2/argUChar.cpp @@ -1,10 +1,14 @@ // automatically generated by wrap #include +#include #include +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("argUChar",nargout,nargin-1,1); - boost::shared_ptr self = unwrap_shared_ptr< Point2 >(in[0],"Point2"); - unsigned char a = unwrap< unsigned char >(in[1]); - self->argUChar(a); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; + unsigned char a = unwrap< unsigned char >(in[1]); + obj->argUChar(a); } diff --git a/wrap/tests/expected/@Point2/argUChar.m b/wrap/tests/expected/@Point2/argUChar.m index bb524b3f0..ea42a2b4f 100644 --- a/wrap/tests/expected/@Point2/argUChar.m +++ b/wrap/tests/expected/@Point2/argUChar.m @@ -1,5 +1,4 @@ -% automatically generated by wrap +% result = obj.argUChar(a) function result = argUChar(obj,a) -% usage: obj.argUChar(a) error('need to compile argUChar.cpp'); end diff --git a/wrap/tests/expected/@Point2/dim.cpp b/wrap/tests/expected/@Point2/dim.cpp index 1349dc267..7e44ae075 100644 --- a/wrap/tests/expected/@Point2/dim.cpp +++ b/wrap/tests/expected/@Point2/dim.cpp @@ -1,10 +1,14 @@ // automatically generated by wrap #include +#include #include +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("dim",nargout,nargin-1,0); - boost::shared_ptr self = unwrap_shared_ptr< Point2 >(in[0],"Point2"); - int result = self->dim(); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; + int result = obj->dim(); out[0] = wrap< int >(result); } diff --git a/wrap/tests/expected/@Point2/dim.m b/wrap/tests/expected/@Point2/dim.m index 84c368193..934e0b895 100644 --- a/wrap/tests/expected/@Point2/dim.m +++ b/wrap/tests/expected/@Point2/dim.m @@ -1,5 +1,4 @@ -% automatically generated by wrap +% result = obj.dim() function result = dim(obj) -% usage: obj.dim() error('need to compile dim.cpp'); end diff --git a/wrap/tests/expected/@Point2/returnChar.cpp b/wrap/tests/expected/@Point2/returnChar.cpp index c5b67a018..43a537786 100644 --- a/wrap/tests/expected/@Point2/returnChar.cpp +++ b/wrap/tests/expected/@Point2/returnChar.cpp @@ -1,10 +1,14 @@ // automatically generated by wrap #include +#include #include +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("returnChar",nargout,nargin-1,0); - boost::shared_ptr self = unwrap_shared_ptr< Point2 >(in[0],"Point2"); - char result = self->returnChar(); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; + char result = obj->returnChar(); out[0] = wrap< char >(result); } diff --git a/wrap/tests/expected/@Point2/returnChar.m b/wrap/tests/expected/@Point2/returnChar.m index a33718047..8c3ceee35 100644 --- a/wrap/tests/expected/@Point2/returnChar.m +++ b/wrap/tests/expected/@Point2/returnChar.m @@ -1,5 +1,4 @@ -% automatically generated by wrap +% result = obj.returnChar() function result = returnChar(obj) -% usage: obj.returnChar() error('need to compile returnChar.cpp'); end diff --git a/wrap/tests/expected/@Point2/vectorConfusion.cpp b/wrap/tests/expected/@Point2/vectorConfusion.cpp index d992d1d94..e3aa4f0d6 100644 --- a/wrap/tests/expected/@Point2/vectorConfusion.cpp +++ b/wrap/tests/expected/@Point2/vectorConfusion.cpp @@ -1,10 +1,16 @@ // automatically generated by wrap #include +#include #include +typedef boost::shared_ptr SharedVectorNotEigen; +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("vectorConfusion",nargout,nargin-1,0); - boost::shared_ptr self = unwrap_shared_ptr< Point2 >(in[0],"Point2"); - VectorNotEigen result = self->vectorConfusion(); - out[0] = wrap_shared_ptr(boost::make_shared< VectorNotEigen >(result),"VectorNotEigen"); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; + VectorNotEigen result = obj->vectorConfusion(); + SharedVectorNotEigen* ret = new SharedVectorNotEigen(new VectorNotEigen(result)); + out[0] = wrap_collect_shared_ptr(ret,"VectorNotEigen"); } diff --git a/wrap/tests/expected/@Point2/vectorConfusion.m b/wrap/tests/expected/@Point2/vectorConfusion.m index cc47b0dc7..9966c930d 100644 --- a/wrap/tests/expected/@Point2/vectorConfusion.m +++ b/wrap/tests/expected/@Point2/vectorConfusion.m @@ -1,5 +1,4 @@ -% automatically generated by wrap +% result = obj.vectorConfusion() function result = vectorConfusion(obj) -% usage: obj.vectorConfusion() error('need to compile vectorConfusion.cpp'); end diff --git a/wrap/tests/expected/@Point2/x.cpp b/wrap/tests/expected/@Point2/x.cpp index 65e56cae5..8cebadb66 100644 --- a/wrap/tests/expected/@Point2/x.cpp +++ b/wrap/tests/expected/@Point2/x.cpp @@ -1,10 +1,14 @@ // automatically generated by wrap #include +#include #include +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("x",nargout,nargin-1,0); - boost::shared_ptr self = unwrap_shared_ptr< Point2 >(in[0],"Point2"); - double result = self->x(); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; + double result = obj->x(); out[0] = wrap< double >(result); } diff --git a/wrap/tests/expected/@Point2/x.m b/wrap/tests/expected/@Point2/x.m index e1ebbd450..44f069872 100644 --- a/wrap/tests/expected/@Point2/x.m +++ b/wrap/tests/expected/@Point2/x.m @@ -1,5 +1,4 @@ -% automatically generated by wrap +% result = obj.x() function result = x(obj) -% usage: obj.x() error('need to compile x.cpp'); end diff --git a/wrap/tests/expected/@Point2/y.cpp b/wrap/tests/expected/@Point2/y.cpp index f8e10dc5d..7e3650534 100644 --- a/wrap/tests/expected/@Point2/y.cpp +++ b/wrap/tests/expected/@Point2/y.cpp @@ -1,10 +1,14 @@ // automatically generated by wrap #include +#include #include +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("y",nargout,nargin-1,0); - boost::shared_ptr self = unwrap_shared_ptr< Point2 >(in[0],"Point2"); - double result = self->y(); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; + double result = obj->y(); out[0] = wrap< double >(result); } diff --git a/wrap/tests/expected/@Point2/y.m b/wrap/tests/expected/@Point2/y.m index d27fc8bf2..7971c1e33 100644 --- a/wrap/tests/expected/@Point2/y.m +++ b/wrap/tests/expected/@Point2/y.m @@ -1,5 +1,4 @@ -% automatically generated by wrap +% result = obj.y() function result = y(obj) -% usage: obj.y() error('need to compile y.cpp'); end diff --git a/wrap/tests/expected/@Point3/Point3.m b/wrap/tests/expected/@Point3/Point3.m index 3e7a6fd65..b916293b7 100644 --- a/wrap/tests/expected/@Point3/Point3.m +++ b/wrap/tests/expected/@Point3/Point3.m @@ -5,11 +5,15 @@ classdef Point3 < handle end methods function obj = Point3(varargin) - if (nargin == 3 && isa(varargin{1},'double') && isa(varargin{2},'double') && isa(varargin{3},'double')), obj.self = new_Point3_ddd(varargin{1},varargin{2},varargin{3}); end - if nargin ~= 13 && obj.self == 0, error('Point3 constructor failed'); end + if (nargin == 3 && isa(varargin{1},'double') && isa(varargin{2},'double') && isa(varargin{3},'double')), obj.self = new_Point3_(0,0,varargin{1},varargin{2},varargin{3}); end + if nargin ==14, new_Point3_(varargin{1},0); end + if nargin ~= 13 && nargin ~= 14 && obj.self == 0, error('Point3 constructor failed'); end end function delete(obj) - delete_Point3(obj); + if obj.self ~= 0 + new_Point3_(obj.self); + obj.self = 0; + end end function display(obj), obj.print(''); end function disp(obj), obj.display; end diff --git a/wrap/tests/expected/@Point3/norm.cpp b/wrap/tests/expected/@Point3/norm.cpp index 0c7ac2038..8f6a10b72 100644 --- a/wrap/tests/expected/@Point3/norm.cpp +++ b/wrap/tests/expected/@Point3/norm.cpp @@ -1,11 +1,15 @@ // automatically generated by wrap #include +#include #include using namespace geometry; +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("norm",nargout,nargin-1,0); - boost::shared_ptr self = unwrap_shared_ptr< Point3 >(in[0],"Point3"); - double result = self->norm(); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; + double result = obj->norm(); out[0] = wrap< double >(result); } diff --git a/wrap/tests/expected/@Test/Test.m b/wrap/tests/expected/@Test/Test.m index b8e55381c..e4bd30221 100644 --- a/wrap/tests/expected/@Test/Test.m +++ b/wrap/tests/expected/@Test/Test.m @@ -5,12 +5,16 @@ classdef Test < handle end methods function obj = Test(varargin) - if (nargin == 0), obj.self = new_Test_(); end - if (nargin == 2 && isa(varargin{1},'double') && isa(varargin{2},'double')), obj.self = new_Test_dM(varargin{1},varargin{2}); end - if nargin ~= 13 && obj.self == 0, error('Test constructor failed'); end + if (nargin == 0), obj.self = new_Test_(0,0); end + if (nargin == 2 && isa(varargin{1},'double') && isa(varargin{2},'double')), obj.self = new_Test_(0,1,varargin{1},varargin{2}); end + if nargin ==14, new_Test_(varargin{1},0); end + if nargin ~= 13 && nargin ~= 14 && obj.self == 0, error('Test constructor failed'); end end function delete(obj) - delete_Test(obj); + if obj.self ~= 0 + new_Test_(obj.self); + obj.self = 0; + end end function display(obj), obj.print(''); end function disp(obj), obj.display; end diff --git a/wrap/tests/expected/@Test/arg_EigenConstRef.cpp b/wrap/tests/expected/@Test/arg_EigenConstRef.cpp index 09a5c6f62..848870d11 100644 --- a/wrap/tests/expected/@Test/arg_EigenConstRef.cpp +++ b/wrap/tests/expected/@Test/arg_EigenConstRef.cpp @@ -1,11 +1,15 @@ // automatically generated by wrap #include +#include #include using namespace geometry; +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("arg_EigenConstRef",nargout,nargin-1,1); - boost::shared_ptr self = unwrap_shared_ptr< Test >(in[0],"Test"); - Matrix& value = *unwrap_shared_ptr< Matrix >(in[1], "Matrix"); - self->arg_EigenConstRef(value); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; + Matrix& value = *unwrap_shared_ptr< Matrix >(in[1], "Matrix"); + obj->arg_EigenConstRef(value); } diff --git a/wrap/tests/expected/@Test/arg_EigenConstRef.m b/wrap/tests/expected/@Test/arg_EigenConstRef.m index 9e6c04c5a..c348014c1 100644 --- a/wrap/tests/expected/@Test/arg_EigenConstRef.m +++ b/wrap/tests/expected/@Test/arg_EigenConstRef.m @@ -1,5 +1,4 @@ -% automatically generated by wrap +% result = obj.arg_EigenConstRef(value) function result = arg_EigenConstRef(obj,value) -% usage: obj.arg_EigenConstRef(value) error('need to compile arg_EigenConstRef.cpp'); end diff --git a/wrap/tests/expected/@Test/create_MixedPtrs.cpp b/wrap/tests/expected/@Test/create_MixedPtrs.cpp index 81bcdc5d8..1776c855b 100644 --- a/wrap/tests/expected/@Test/create_MixedPtrs.cpp +++ b/wrap/tests/expected/@Test/create_MixedPtrs.cpp @@ -1,12 +1,20 @@ // automatically generated by wrap #include +#include #include using namespace geometry; +typedef boost::shared_ptr SharedTest; +typedef boost::shared_ptr SharedTest; +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("create_MixedPtrs",nargout,nargin-1,0); - boost::shared_ptr self = unwrap_shared_ptr< Test >(in[0],"Test"); - pair< Test, boost::shared_ptr > result = self->create_MixedPtrs(); - out[0] = wrap_shared_ptr(boost::make_shared< Test >(result.first),"Test"); - out[1] = wrap_shared_ptr(result.second,"Test"); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; + pair< Test, SharedTest > result = obj->create_MixedPtrs(); + SharedTest* ret = new SharedTest(new Test(result.first)); + out[0] = wrap_collect_shared_ptr(ret,"Test"); + SharedTest* ret = new SharedTest(result.second); + out[1] = wrap_collect_shared_ptr(ret,"Test"); } diff --git a/wrap/tests/expected/@Test/create_MixedPtrs.m b/wrap/tests/expected/@Test/create_MixedPtrs.m index bd1927fba..38a9f1d7e 100644 --- a/wrap/tests/expected/@Test/create_MixedPtrs.m +++ b/wrap/tests/expected/@Test/create_MixedPtrs.m @@ -1,5 +1,4 @@ -% automatically generated by wrap +% [first,second] = obj.create_MixedPtrs() function [first,second] = create_MixedPtrs(obj) -% usage: obj.create_MixedPtrs() error('need to compile create_MixedPtrs.cpp'); end diff --git a/wrap/tests/expected/@Test/create_ptrs.cpp b/wrap/tests/expected/@Test/create_ptrs.cpp index 830d62a12..ab4261d5c 100644 --- a/wrap/tests/expected/@Test/create_ptrs.cpp +++ b/wrap/tests/expected/@Test/create_ptrs.cpp @@ -1,12 +1,20 @@ // automatically generated by wrap #include +#include #include using namespace geometry; +typedef boost::shared_ptr SharedTest; +typedef boost::shared_ptr SharedTest; +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("create_ptrs",nargout,nargin-1,0); - boost::shared_ptr self = unwrap_shared_ptr< Test >(in[0],"Test"); - pair< boost::shared_ptr, boost::shared_ptr > result = self->create_ptrs(); - out[0] = wrap_shared_ptr(result.first,"Test"); - out[1] = wrap_shared_ptr(result.second,"Test"); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; + pair< SharedTest, SharedTest > result = obj->create_ptrs(); + SharedTest* ret = new SharedTest(result.first); + out[0] = wrap_collect_shared_ptr(ret,"Test"); + SharedTest* ret = new SharedTest(result.second); + out[1] = wrap_collect_shared_ptr(ret,"Test"); } diff --git a/wrap/tests/expected/@Test/create_ptrs.m b/wrap/tests/expected/@Test/create_ptrs.m index e380f1829..80c6781dc 100644 --- a/wrap/tests/expected/@Test/create_ptrs.m +++ b/wrap/tests/expected/@Test/create_ptrs.m @@ -1,5 +1,4 @@ -% automatically generated by wrap +% [first,second] = obj.create_ptrs() function [first,second] = create_ptrs(obj) -% usage: obj.create_ptrs() error('need to compile create_ptrs.cpp'); end diff --git a/wrap/tests/expected/@Test/print.cpp b/wrap/tests/expected/@Test/print.cpp index 1d259f2e8..e3a758182 100644 --- a/wrap/tests/expected/@Test/print.cpp +++ b/wrap/tests/expected/@Test/print.cpp @@ -1,10 +1,14 @@ // automatically generated by wrap #include +#include #include using namespace geometry; +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("print",nargout,nargin-1,0); - boost::shared_ptr self = unwrap_shared_ptr< Test >(in[0],"Test"); - self->print(); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; + obj->print(); } diff --git a/wrap/tests/expected/@Test/return_Point2Ptr.cpp b/wrap/tests/expected/@Test/return_Point2Ptr.cpp index e6990198e..b3e61d37a 100644 --- a/wrap/tests/expected/@Test/return_Point2Ptr.cpp +++ b/wrap/tests/expected/@Test/return_Point2Ptr.cpp @@ -1,12 +1,18 @@ // automatically generated by wrap #include +#include #include using namespace geometry; +typedef boost::shared_ptr SharedPoint2; +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("return_Point2Ptr",nargout,nargin-1,1); - boost::shared_ptr self = unwrap_shared_ptr< Test >(in[0],"Test"); - bool value = unwrap< bool >(in[1]); - boost::shared_ptr result = self->return_Point2Ptr(value); - out[0] = wrap_shared_ptr(result,"Point2"); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; + bool value = unwrap< bool >(in[1]); + SharedPoint2 result = obj->return_Point2Ptr(value); + SharedPoint2* ret = new SharedPoint2(result); + out[0] = wrap_collect_shared_ptr(ret,"Point2"); } diff --git a/wrap/tests/expected/@Test/return_Point2Ptr.m b/wrap/tests/expected/@Test/return_Point2Ptr.m index 26fd146a2..84e586bc7 100644 --- a/wrap/tests/expected/@Test/return_Point2Ptr.m +++ b/wrap/tests/expected/@Test/return_Point2Ptr.m @@ -1,5 +1,4 @@ -% automatically generated by wrap +% result = obj.return_Point2Ptr(value) function result = return_Point2Ptr(obj,value) -% usage: obj.return_Point2Ptr(value) error('need to compile return_Point2Ptr.cpp'); end diff --git a/wrap/tests/expected/@Test/return_Test.cpp b/wrap/tests/expected/@Test/return_Test.cpp index 63e9f5a3b..cd0f1ef10 100644 --- a/wrap/tests/expected/@Test/return_Test.cpp +++ b/wrap/tests/expected/@Test/return_Test.cpp @@ -1,12 +1,18 @@ // automatically generated by wrap #include +#include #include using namespace geometry; +typedef boost::shared_ptr SharedTest; +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("return_Test",nargout,nargin-1,1); - boost::shared_ptr self = unwrap_shared_ptr< Test >(in[0],"Test"); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; boost::shared_ptr value = unwrap_shared_ptr< Test >(in[1], "Test"); - Test result = self->return_Test(value); - out[0] = wrap_shared_ptr(boost::make_shared< Test >(result),"Test"); + Test result = obj->return_Test(value); + SharedTest* ret = new SharedTest(new Test(result)); + out[0] = wrap_collect_shared_ptr(ret,"Test"); } diff --git a/wrap/tests/expected/@Test/return_Test.m b/wrap/tests/expected/@Test/return_Test.m index f31dc3192..d1a2e440c 100644 --- a/wrap/tests/expected/@Test/return_Test.m +++ b/wrap/tests/expected/@Test/return_Test.m @@ -1,5 +1,4 @@ -% automatically generated by wrap +% result = obj.return_Test(value) function result = return_Test(obj,value) -% usage: obj.return_Test(value) error('need to compile return_Test.cpp'); end diff --git a/wrap/tests/expected/@Test/return_TestPtr.cpp b/wrap/tests/expected/@Test/return_TestPtr.cpp index 3c053791d..2957de8f3 100644 --- a/wrap/tests/expected/@Test/return_TestPtr.cpp +++ b/wrap/tests/expected/@Test/return_TestPtr.cpp @@ -1,12 +1,18 @@ // automatically generated by wrap #include +#include #include using namespace geometry; +typedef boost::shared_ptr SharedTest; +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("return_TestPtr",nargout,nargin-1,1); - boost::shared_ptr self = unwrap_shared_ptr< Test >(in[0],"Test"); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; boost::shared_ptr value = unwrap_shared_ptr< Test >(in[1], "Test"); - boost::shared_ptr result = self->return_TestPtr(value); - out[0] = wrap_shared_ptr(result,"Test"); + SharedTest result = obj->return_TestPtr(value); + SharedTest* ret = new SharedTest(result); + out[0] = wrap_collect_shared_ptr(ret,"Test"); } diff --git a/wrap/tests/expected/@Test/return_TestPtr.m b/wrap/tests/expected/@Test/return_TestPtr.m index e69149551..937c85fcc 100644 --- a/wrap/tests/expected/@Test/return_TestPtr.m +++ b/wrap/tests/expected/@Test/return_TestPtr.m @@ -1,5 +1,4 @@ -% automatically generated by wrap +% result = obj.return_TestPtr(value) function result = return_TestPtr(obj,value) -% usage: obj.return_TestPtr(value) error('need to compile return_TestPtr.cpp'); end diff --git a/wrap/tests/expected/@Test/return_bool.cpp b/wrap/tests/expected/@Test/return_bool.cpp index 92612a279..c9c792934 100644 --- a/wrap/tests/expected/@Test/return_bool.cpp +++ b/wrap/tests/expected/@Test/return_bool.cpp @@ -1,12 +1,16 @@ // automatically generated by wrap #include +#include #include using namespace geometry; +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("return_bool",nargout,nargin-1,1); - boost::shared_ptr self = unwrap_shared_ptr< Test >(in[0],"Test"); - bool value = unwrap< bool >(in[1]); - bool result = self->return_bool(value); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; + bool value = unwrap< bool >(in[1]); + bool result = obj->return_bool(value); out[0] = wrap< bool >(result); } diff --git a/wrap/tests/expected/@Test/return_bool.m b/wrap/tests/expected/@Test/return_bool.m index a0c5a0b17..358cb9750 100644 --- a/wrap/tests/expected/@Test/return_bool.m +++ b/wrap/tests/expected/@Test/return_bool.m @@ -1,5 +1,4 @@ -% automatically generated by wrap +% result = obj.return_bool(value) function result = return_bool(obj,value) -% usage: obj.return_bool(value) error('need to compile return_bool.cpp'); end diff --git a/wrap/tests/expected/@Test/return_double.cpp b/wrap/tests/expected/@Test/return_double.cpp index e167a16c0..4e6612278 100644 --- a/wrap/tests/expected/@Test/return_double.cpp +++ b/wrap/tests/expected/@Test/return_double.cpp @@ -1,12 +1,16 @@ // automatically generated by wrap #include +#include #include using namespace geometry; +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("return_double",nargout,nargin-1,1); - boost::shared_ptr self = unwrap_shared_ptr< Test >(in[0],"Test"); - double value = unwrap< double >(in[1]); - double result = self->return_double(value); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; + double value = unwrap< double >(in[1]); + double result = obj->return_double(value); out[0] = wrap< double >(result); } diff --git a/wrap/tests/expected/@Test/return_double.m b/wrap/tests/expected/@Test/return_double.m index dd181ff0b..681371f39 100644 --- a/wrap/tests/expected/@Test/return_double.m +++ b/wrap/tests/expected/@Test/return_double.m @@ -1,5 +1,4 @@ -% automatically generated by wrap +% result = obj.return_double(value) function result = return_double(obj,value) -% usage: obj.return_double(value) error('need to compile return_double.cpp'); end diff --git a/wrap/tests/expected/@Test/return_field.cpp b/wrap/tests/expected/@Test/return_field.cpp index 838bab0a4..43507f4d7 100644 --- a/wrap/tests/expected/@Test/return_field.cpp +++ b/wrap/tests/expected/@Test/return_field.cpp @@ -1,12 +1,16 @@ // automatically generated by wrap #include +#include #include using namespace geometry; +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("return_field",nargout,nargin-1,1); - boost::shared_ptr self = unwrap_shared_ptr< Test >(in[0],"Test"); - Test& t = *unwrap_shared_ptr< Test >(in[1], "Test"); - bool result = self->return_field(t); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; + Test& t = *unwrap_shared_ptr< Test >(in[1], "Test"); + bool result = obj->return_field(t); out[0] = wrap< bool >(result); } diff --git a/wrap/tests/expected/@Test/return_field.m b/wrap/tests/expected/@Test/return_field.m index bc4223671..e2894c381 100644 --- a/wrap/tests/expected/@Test/return_field.m +++ b/wrap/tests/expected/@Test/return_field.m @@ -1,5 +1,4 @@ -% automatically generated by wrap +% result = obj.return_field(t) function result = return_field(obj,t) -% usage: obj.return_field(t) error('need to compile return_field.cpp'); end diff --git a/wrap/tests/expected/@Test/return_int.cpp b/wrap/tests/expected/@Test/return_int.cpp index 4cdaf5abc..2a27ac73a 100644 --- a/wrap/tests/expected/@Test/return_int.cpp +++ b/wrap/tests/expected/@Test/return_int.cpp @@ -1,12 +1,16 @@ // automatically generated by wrap #include +#include #include using namespace geometry; +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("return_int",nargout,nargin-1,1); - boost::shared_ptr self = unwrap_shared_ptr< Test >(in[0],"Test"); - int value = unwrap< int >(in[1]); - int result = self->return_int(value); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; + int value = unwrap< int >(in[1]); + int result = obj->return_int(value); out[0] = wrap< int >(result); } diff --git a/wrap/tests/expected/@Test/return_int.m b/wrap/tests/expected/@Test/return_int.m index 4984557e6..779e9feb2 100644 --- a/wrap/tests/expected/@Test/return_int.m +++ b/wrap/tests/expected/@Test/return_int.m @@ -1,5 +1,4 @@ -% automatically generated by wrap +% result = obj.return_int(value) function result = return_int(obj,value) -% usage: obj.return_int(value) error('need to compile return_int.cpp'); end diff --git a/wrap/tests/expected/@Test/return_matrix1.cpp b/wrap/tests/expected/@Test/return_matrix1.cpp index f7fb72040..d4c66622b 100644 --- a/wrap/tests/expected/@Test/return_matrix1.cpp +++ b/wrap/tests/expected/@Test/return_matrix1.cpp @@ -1,12 +1,16 @@ // automatically generated by wrap #include +#include #include using namespace geometry; +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("return_matrix1",nargout,nargin-1,1); - boost::shared_ptr self = unwrap_shared_ptr< Test >(in[0],"Test"); - Matrix value = unwrap< Matrix >(in[1]); - Matrix result = self->return_matrix1(value); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; + Matrix value = unwrap< Matrix >(in[1]); + Matrix result = obj->return_matrix1(value); out[0] = wrap< Matrix >(result); } diff --git a/wrap/tests/expected/@Test/return_matrix1.m b/wrap/tests/expected/@Test/return_matrix1.m index 66dd1886f..d6d9791f9 100644 --- a/wrap/tests/expected/@Test/return_matrix1.m +++ b/wrap/tests/expected/@Test/return_matrix1.m @@ -1,5 +1,4 @@ -% automatically generated by wrap +% result = obj.return_matrix1(value) function result = return_matrix1(obj,value) -% usage: obj.return_matrix1(value) error('need to compile return_matrix1.cpp'); end diff --git a/wrap/tests/expected/@Test/return_matrix2.cpp b/wrap/tests/expected/@Test/return_matrix2.cpp index f8b6823fa..a40fa79cf 100644 --- a/wrap/tests/expected/@Test/return_matrix2.cpp +++ b/wrap/tests/expected/@Test/return_matrix2.cpp @@ -1,12 +1,16 @@ // automatically generated by wrap #include +#include #include using namespace geometry; +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("return_matrix2",nargout,nargin-1,1); - boost::shared_ptr self = unwrap_shared_ptr< Test >(in[0],"Test"); - Matrix value = unwrap< Matrix >(in[1]); - Matrix result = self->return_matrix2(value); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; + Matrix value = unwrap< Matrix >(in[1]); + Matrix result = obj->return_matrix2(value); out[0] = wrap< Matrix >(result); } diff --git a/wrap/tests/expected/@Test/return_matrix2.m b/wrap/tests/expected/@Test/return_matrix2.m index 5a0359862..584b365b8 100644 --- a/wrap/tests/expected/@Test/return_matrix2.m +++ b/wrap/tests/expected/@Test/return_matrix2.m @@ -1,5 +1,4 @@ -% automatically generated by wrap +% result = obj.return_matrix2(value) function result = return_matrix2(obj,value) -% usage: obj.return_matrix2(value) error('need to compile return_matrix2.cpp'); end diff --git a/wrap/tests/expected/@Test/return_pair.cpp b/wrap/tests/expected/@Test/return_pair.cpp index 54b3f6522..7d715644c 100644 --- a/wrap/tests/expected/@Test/return_pair.cpp +++ b/wrap/tests/expected/@Test/return_pair.cpp @@ -1,14 +1,18 @@ // automatically generated by wrap #include +#include #include using namespace geometry; +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("return_pair",nargout,nargin-1,2); - boost::shared_ptr self = unwrap_shared_ptr< Test >(in[0],"Test"); - Vector v = unwrap< Vector >(in[1]); - Matrix A = unwrap< Matrix >(in[2]); - pair< Vector, Matrix > result = self->return_pair(v,A); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; + Vector v = unwrap< Vector >(in[1]); + Matrix A = unwrap< Matrix >(in[2]); + pair< Vector, Matrix > result = obj->return_pair(v,A); out[0] = wrap< Vector >(result.first); out[1] = wrap< Matrix >(result.second); } diff --git a/wrap/tests/expected/@Test/return_pair.m b/wrap/tests/expected/@Test/return_pair.m index 611dd3434..2e892210c 100644 --- a/wrap/tests/expected/@Test/return_pair.m +++ b/wrap/tests/expected/@Test/return_pair.m @@ -1,5 +1,4 @@ -% automatically generated by wrap +% [first,second] = obj.return_pair(v,A) function [first,second] = return_pair(obj,v,A) -% usage: obj.return_pair(v,A) error('need to compile return_pair.cpp'); end diff --git a/wrap/tests/expected/@Test/return_ptrs.cpp b/wrap/tests/expected/@Test/return_ptrs.cpp index eea94ca3c..8a5f9a0ce 100644 --- a/wrap/tests/expected/@Test/return_ptrs.cpp +++ b/wrap/tests/expected/@Test/return_ptrs.cpp @@ -1,14 +1,22 @@ // automatically generated by wrap #include +#include #include using namespace geometry; +typedef boost::shared_ptr SharedTest; +typedef boost::shared_ptr SharedTest; +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("return_ptrs",nargout,nargin-1,2); - boost::shared_ptr self = unwrap_shared_ptr< Test >(in[0],"Test"); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; boost::shared_ptr p1 = unwrap_shared_ptr< Test >(in[1], "Test"); boost::shared_ptr p2 = unwrap_shared_ptr< Test >(in[2], "Test"); - pair< boost::shared_ptr, boost::shared_ptr > result = self->return_ptrs(p1,p2); - out[0] = wrap_shared_ptr(result.first,"Test"); - out[1] = wrap_shared_ptr(result.second,"Test"); + pair< SharedTest, SharedTest > result = obj->return_ptrs(p1,p2); + SharedTest* ret = new SharedTest(result.first); + out[0] = wrap_collect_shared_ptr(ret,"Test"); + SharedTest* ret = new SharedTest(result.second); + out[1] = wrap_collect_shared_ptr(ret,"Test"); } diff --git a/wrap/tests/expected/@Test/return_ptrs.m b/wrap/tests/expected/@Test/return_ptrs.m index 18d69ac92..a7af4b73c 100644 --- a/wrap/tests/expected/@Test/return_ptrs.m +++ b/wrap/tests/expected/@Test/return_ptrs.m @@ -1,5 +1,4 @@ -% automatically generated by wrap +% [first,second] = obj.return_ptrs(p1,p2) function [first,second] = return_ptrs(obj,p1,p2) -% usage: obj.return_ptrs(p1,p2) error('need to compile return_ptrs.cpp'); end diff --git a/wrap/tests/expected/@Test/return_size_t.cpp b/wrap/tests/expected/@Test/return_size_t.cpp index 901c5c9bd..f18680d0d 100644 --- a/wrap/tests/expected/@Test/return_size_t.cpp +++ b/wrap/tests/expected/@Test/return_size_t.cpp @@ -1,12 +1,16 @@ // automatically generated by wrap #include +#include #include using namespace geometry; +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("return_size_t",nargout,nargin-1,1); - boost::shared_ptr self = unwrap_shared_ptr< Test >(in[0],"Test"); - size_t value = unwrap< size_t >(in[1]); - size_t result = self->return_size_t(value); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; + size_t value = unwrap< size_t >(in[1]); + size_t result = obj->return_size_t(value); out[0] = wrap< size_t >(result); } diff --git a/wrap/tests/expected/@Test/return_size_t.m b/wrap/tests/expected/@Test/return_size_t.m index 143f04d24..2fae64028 100644 --- a/wrap/tests/expected/@Test/return_size_t.m +++ b/wrap/tests/expected/@Test/return_size_t.m @@ -1,5 +1,4 @@ -% automatically generated by wrap +% result = obj.return_size_t(value) function result = return_size_t(obj,value) -% usage: obj.return_size_t(value) error('need to compile return_size_t.cpp'); end diff --git a/wrap/tests/expected/@Test/return_string.cpp b/wrap/tests/expected/@Test/return_string.cpp index 778e07522..013814241 100644 --- a/wrap/tests/expected/@Test/return_string.cpp +++ b/wrap/tests/expected/@Test/return_string.cpp @@ -1,12 +1,16 @@ // automatically generated by wrap #include +#include #include using namespace geometry; +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("return_string",nargout,nargin-1,1); - boost::shared_ptr self = unwrap_shared_ptr< Test >(in[0],"Test"); - string value = unwrap< string >(in[1]); - string result = self->return_string(value); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; + string value = unwrap< string >(in[1]); + string result = obj->return_string(value); out[0] = wrap< string >(result); } diff --git a/wrap/tests/expected/@Test/return_string.m b/wrap/tests/expected/@Test/return_string.m index f1eab8661..67fb5f10d 100644 --- a/wrap/tests/expected/@Test/return_string.m +++ b/wrap/tests/expected/@Test/return_string.m @@ -1,5 +1,4 @@ -% automatically generated by wrap +% result = obj.return_string(value) function result = return_string(obj,value) -% usage: obj.return_string(value) error('need to compile return_string.cpp'); end diff --git a/wrap/tests/expected/@Test/return_vector1.cpp b/wrap/tests/expected/@Test/return_vector1.cpp index 5e8aed397..593cd20bd 100644 --- a/wrap/tests/expected/@Test/return_vector1.cpp +++ b/wrap/tests/expected/@Test/return_vector1.cpp @@ -1,12 +1,16 @@ // automatically generated by wrap #include +#include #include using namespace geometry; +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("return_vector1",nargout,nargin-1,1); - boost::shared_ptr self = unwrap_shared_ptr< Test >(in[0],"Test"); - Vector value = unwrap< Vector >(in[1]); - Vector result = self->return_vector1(value); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; + Vector value = unwrap< Vector >(in[1]); + Vector result = obj->return_vector1(value); out[0] = wrap< Vector >(result); } diff --git a/wrap/tests/expected/@Test/return_vector1.m b/wrap/tests/expected/@Test/return_vector1.m index 316ca4cf2..461c51618 100644 --- a/wrap/tests/expected/@Test/return_vector1.m +++ b/wrap/tests/expected/@Test/return_vector1.m @@ -1,5 +1,4 @@ -% automatically generated by wrap +% result = obj.return_vector1(value) function result = return_vector1(obj,value) -% usage: obj.return_vector1(value) error('need to compile return_vector1.cpp'); end diff --git a/wrap/tests/expected/@Test/return_vector2.cpp b/wrap/tests/expected/@Test/return_vector2.cpp index 4c3242f2e..1be4a614a 100644 --- a/wrap/tests/expected/@Test/return_vector2.cpp +++ b/wrap/tests/expected/@Test/return_vector2.cpp @@ -1,12 +1,16 @@ // automatically generated by wrap #include +#include #include using namespace geometry; +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("return_vector2",nargout,nargin-1,1); - boost::shared_ptr self = unwrap_shared_ptr< Test >(in[0],"Test"); - Vector value = unwrap< Vector >(in[1]); - Vector result = self->return_vector2(value); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; + Vector value = unwrap< Vector >(in[1]); + Vector result = obj->return_vector2(value); out[0] = wrap< Vector >(result); } diff --git a/wrap/tests/expected/@Test/return_vector2.m b/wrap/tests/expected/@Test/return_vector2.m index 6426e0ce9..f3c77dd85 100644 --- a/wrap/tests/expected/@Test/return_vector2.m +++ b/wrap/tests/expected/@Test/return_vector2.m @@ -1,5 +1,4 @@ -% automatically generated by wrap +% result = obj.return_vector2(value) function result = return_vector2(obj,value) -% usage: obj.return_vector2(value) error('need to compile return_vector2.cpp'); end diff --git a/wrap/tests/expected/Makefile b/wrap/tests/expected/Makefile index a8959757b..0797d0dd3 100644 --- a/wrap/tests/expected/Makefile +++ b/wrap/tests/expected/Makefile @@ -9,10 +9,6 @@ all: Point2 Point3 Test # Point2 new_Point2_.$(MEXENDING): new_Point2_.cpp $(MEX) $(mex_flags) new_Point2_.cpp -output new_Point2_ -new_Point2_dd.$(MEXENDING): new_Point2_dd.cpp - $(MEX) $(mex_flags) new_Point2_dd.cpp -output new_Point2_dd -delete_Point2.$(MEXENDING): delete_Point2.cpp - $(MEX) $(mex_flags) delete_Point2.cpp -output delete_Point2 @Point2/x.$(MEXENDING): @Point2/x.cpp $(MEX) $(mex_flags) @Point2/x.cpp -output @Point2/x @Point2/y.$(MEXENDING): @Point2/y.cpp @@ -28,13 +24,11 @@ delete_Point2.$(MEXENDING): delete_Point2.cpp @Point2/vectorConfusion.$(MEXENDING): @Point2/vectorConfusion.cpp $(MEX) $(mex_flags) @Point2/vectorConfusion.cpp -output @Point2/vectorConfusion -Point2: new_Point2_.$(MEXENDING) new_Point2_dd.$(MEXENDING) delete_Point2.$(MEXENDING) @Point2/x.$(MEXENDING) @Point2/y.$(MEXENDING) @Point2/dim.$(MEXENDING) @Point2/returnChar.$(MEXENDING) @Point2/argChar.$(MEXENDING) @Point2/argUChar.$(MEXENDING) @Point2/vectorConfusion.$(MEXENDING) +Point2: new_Point2_.$(MEXENDING) @Point2/x.$(MEXENDING) @Point2/y.$(MEXENDING) @Point2/dim.$(MEXENDING) @Point2/returnChar.$(MEXENDING) @Point2/argChar.$(MEXENDING) @Point2/argUChar.$(MEXENDING) @Point2/vectorConfusion.$(MEXENDING) # Point3 -new_Point3_ddd.$(MEXENDING): new_Point3_ddd.cpp - $(MEX) $(mex_flags) new_Point3_ddd.cpp -output new_Point3_ddd -delete_Point3.$(MEXENDING): delete_Point3.cpp - $(MEX) $(mex_flags) delete_Point3.cpp -output delete_Point3 +new_Point3_.$(MEXENDING): new_Point3_.cpp + $(MEX) $(mex_flags) new_Point3_.cpp -output new_Point3_ Point3_staticFunction.$(MEXENDING): Point3_staticFunction.cpp $(MEX) $(mex_flags) Point3_staticFunction.cpp -output Point3_staticFunction Point3_StaticFunctionRet.$(MEXENDING): Point3_StaticFunctionRet.cpp @@ -42,15 +36,11 @@ Point3_StaticFunctionRet.$(MEXENDING): Point3_StaticFunctionRet.cpp @Point3/norm.$(MEXENDING): @Point3/norm.cpp $(MEX) $(mex_flags) @Point3/norm.cpp -output @Point3/norm -Point3: new_Point3_ddd.$(MEXENDING) delete_Point3.$(MEXENDING) Point3_staticFunction.$(MEXENDING) Point3_StaticFunctionRet.$(MEXENDING) @Point3/norm.$(MEXENDING) +Point3: new_Point3_.$(MEXENDING) Point3_staticFunction.$(MEXENDING) Point3_StaticFunctionRet.$(MEXENDING) @Point3/norm.$(MEXENDING) # Test new_Test_.$(MEXENDING): new_Test_.cpp $(MEX) $(mex_flags) new_Test_.cpp -output new_Test_ -new_Test_dM.$(MEXENDING): new_Test_dM.cpp - $(MEX) $(mex_flags) new_Test_dM.cpp -output new_Test_dM -delete_Test.$(MEXENDING): delete_Test.cpp - $(MEX) $(mex_flags) delete_Test.cpp -output delete_Test @Test/return_pair.$(MEXENDING): @Test/return_pair.cpp $(MEX) $(mex_flags) @Test/return_pair.cpp -output @Test/return_pair @Test/return_bool.$(MEXENDING): @Test/return_bool.cpp @@ -90,7 +80,7 @@ delete_Test.$(MEXENDING): delete_Test.cpp @Test/print.$(MEXENDING): @Test/print.cpp $(MEX) $(mex_flags) @Test/print.cpp -output @Test/print -Test: new_Test_.$(MEXENDING) new_Test_dM.$(MEXENDING) delete_Test.$(MEXENDING) @Test/return_pair.$(MEXENDING) @Test/return_bool.$(MEXENDING) @Test/return_size_t.$(MEXENDING) @Test/return_int.$(MEXENDING) @Test/return_double.$(MEXENDING) @Test/return_string.$(MEXENDING) @Test/return_vector1.$(MEXENDING) @Test/return_matrix1.$(MEXENDING) @Test/return_vector2.$(MEXENDING) @Test/return_matrix2.$(MEXENDING) @Test/arg_EigenConstRef.$(MEXENDING) @Test/return_field.$(MEXENDING) @Test/return_TestPtr.$(MEXENDING) @Test/return_Test.$(MEXENDING) @Test/return_Point2Ptr.$(MEXENDING) @Test/create_ptrs.$(MEXENDING) @Test/create_MixedPtrs.$(MEXENDING) @Test/return_ptrs.$(MEXENDING) @Test/print.$(MEXENDING) +Test: new_Test_.$(MEXENDING) @Test/return_pair.$(MEXENDING) @Test/return_bool.$(MEXENDING) @Test/return_size_t.$(MEXENDING) @Test/return_int.$(MEXENDING) @Test/return_double.$(MEXENDING) @Test/return_string.$(MEXENDING) @Test/return_vector1.$(MEXENDING) @Test/return_matrix1.$(MEXENDING) @Test/return_vector2.$(MEXENDING) @Test/return_matrix2.$(MEXENDING) @Test/arg_EigenConstRef.$(MEXENDING) @Test/return_field.$(MEXENDING) @Test/return_TestPtr.$(MEXENDING) @Test/return_Test.$(MEXENDING) @Test/return_Point2Ptr.$(MEXENDING) @Test/create_ptrs.$(MEXENDING) @Test/create_MixedPtrs.$(MEXENDING) @Test/return_ptrs.$(MEXENDING) @Test/print.$(MEXENDING) diff --git a/wrap/tests/expected/Point3_StaticFunctionRet.cpp b/wrap/tests/expected/Point3_StaticFunctionRet.cpp index 652d8713e..49d15f4fa 100644 --- a/wrap/tests/expected/Point3_StaticFunctionRet.cpp +++ b/wrap/tests/expected/Point3_StaticFunctionRet.cpp @@ -1,11 +1,15 @@ // automatically generated by wrap #include +#include #include using namespace geometry; +typedef boost::shared_ptr SharedPoint3; +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("Point3_StaticFunctionRet",nargout,nargin,1); - double z = unwrap< double >(in[0]); + double z = unwrap< double >(in[0]); Point3 result = Point3::StaticFunctionRet(z); - out[0] = wrap_shared_ptr(boost::make_shared< Point3 >(result),"Point3"); + SharedPoint3* ret = new SharedPoint3(new Point3(result)); + out[0] = wrap_collect_shared_ptr(ret,"Point3"); } diff --git a/wrap/tests/expected/Point3_staticFunction.cpp b/wrap/tests/expected/Point3_staticFunction.cpp index 6adfdbe5a..e29670b9a 100644 --- a/wrap/tests/expected/Point3_staticFunction.cpp +++ b/wrap/tests/expected/Point3_staticFunction.cpp @@ -1,7 +1,10 @@ // automatically generated by wrap #include +#include #include using namespace geometry; +typedef boost::shared_ptr Shareddouble; +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("Point3_staticFunction",nargout,nargin,0); diff --git a/wrap/tests/expected/delete_Point2.cpp b/wrap/tests/expected/delete_Point2.cpp deleted file mode 100644 index bd8bd12eb..000000000 --- a/wrap/tests/expected/delete_Point2.cpp +++ /dev/null @@ -1,8 +0,0 @@ -// automatically generated by wrap -#include -#include -void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) -{ - checkArguments("delete_Point2",nargout,nargin,1); - delete_shared_ptr< Point2 >(in[0],"Point2"); -} diff --git a/wrap/tests/expected/delete_Point2.m b/wrap/tests/expected/delete_Point2.m deleted file mode 100644 index c6c623bec..000000000 --- a/wrap/tests/expected/delete_Point2.m +++ /dev/null @@ -1,4 +0,0 @@ -% automatically generated by wrap -function result = delete_Point2(obj) - error('need to compile delete_Point2.cpp'); -end diff --git a/wrap/tests/expected/delete_Point3.cpp b/wrap/tests/expected/delete_Point3.cpp deleted file mode 100644 index 9836bb25e..000000000 --- a/wrap/tests/expected/delete_Point3.cpp +++ /dev/null @@ -1,9 +0,0 @@ -// automatically generated by wrap -#include -#include -using namespace geometry; -void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) -{ - checkArguments("delete_Point3",nargout,nargin,1); - delete_shared_ptr< Point3 >(in[0],"Point3"); -} diff --git a/wrap/tests/expected/delete_Point3.m b/wrap/tests/expected/delete_Point3.m deleted file mode 100644 index b52b898cf..000000000 --- a/wrap/tests/expected/delete_Point3.m +++ /dev/null @@ -1,4 +0,0 @@ -% automatically generated by wrap -function result = delete_Point3(obj) - error('need to compile delete_Point3.cpp'); -end diff --git a/wrap/tests/expected/delete_Test.cpp b/wrap/tests/expected/delete_Test.cpp deleted file mode 100644 index 6a22cc327..000000000 --- a/wrap/tests/expected/delete_Test.cpp +++ /dev/null @@ -1,9 +0,0 @@ -// automatically generated by wrap -#include -#include -using namespace geometry; -void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) -{ - checkArguments("delete_Test",nargout,nargin,1); - delete_shared_ptr< Test >(in[0],"Test"); -} diff --git a/wrap/tests/expected/delete_Test.m b/wrap/tests/expected/delete_Test.m deleted file mode 100644 index 21ec790a3..000000000 --- a/wrap/tests/expected/delete_Test.m +++ /dev/null @@ -1,4 +0,0 @@ -% automatically generated by wrap -function result = delete_Test(obj) - error('need to compile delete_Test.cpp'); -end diff --git a/wrap/tests/expected/make_geometry.m b/wrap/tests/expected/make_geometry.m index 2858f2994..32f81871d 100644 --- a/wrap/tests/expected/make_geometry.m +++ b/wrap/tests/expected/make_geometry.m @@ -10,8 +10,6 @@ addpath(toolboxpath); %% Point2 cd(toolboxpath) mex -O5 new_Point2_.cpp -mex -O5 new_Point2_dd.cpp -mex -O5 delete_Point2.cpp cd @Point2 mex -O5 x.cpp @@ -24,8 +22,7 @@ mex -O5 vectorConfusion.cpp %% Point3 cd(toolboxpath) -mex -O5 new_Point3_ddd.cpp -mex -O5 delete_Point3.cpp +mex -O5 new_Point3_.cpp mex -O5 Point3_staticFunction.cpp mex -O5 Point3_StaticFunctionRet.cpp @@ -35,8 +32,6 @@ mex -O5 norm.cpp %% Test cd(toolboxpath) mex -O5 new_Test_.cpp -mex -O5 new_Test_dM.cpp -mex -O5 delete_Test.cpp cd @Test mex -O5 return_pair.cpp diff --git a/wrap/tests/expected/new_Point2_.cpp b/wrap/tests/expected/new_Point2_.cpp index a88076efb..7d3af0038 100644 --- a/wrap/tests/expected/new_Point2_.cpp +++ b/wrap/tests/expected/new_Point2_.cpp @@ -1,9 +1,48 @@ // automatically generated by wrap #include +#include #include +typedef boost::shared_ptr Shared; + +static std::set collector; + +struct Destruct +{ + void operator() (Shared* p) + { + collector.erase(p); + } +}; + +void cleanup(void) { + std::for_each( collector.begin(), collector.end(), Destruct() ); +} void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { - checkArguments("new_Point2_",nargout,nargin,0); - Point2* self = new Point2(); - out[0] = wrap_constructed(self,"Point2"); + mexAtExit(cleanup); + + const mxArray* input = in[0]; + Shared* self = *(Shared**) mxGetData(input); + + if(self) { + if(nargin > 1) { + collector.insert(self); + } + else if(collector.erase(self)) + delete self; + } else { + int nc = unwrap(in[1]); + if(nc == 0) { + self = new Shared(new Point2()); + } + if(nc == 1) { + double x = unwrap< double >(in[2]); + double y = unwrap< double >(in[3]); + self = new Shared(new Point2(x,y)); + } + collector.insert(self); + std::cout << "constructed " << self << ", size=" << collector.size() << std::endl; + out[0] = mxCreateNumericMatrix(1, 1, mxUINT32OR64_CLASS, mxREAL); + *reinterpret_cast (mxGetPr(out[0])) = self; + } } diff --git a/wrap/tests/expected/new_Point2_.m b/wrap/tests/expected/new_Point2_.m index b0b655b5e..b5fdcff15 100644 --- a/wrap/tests/expected/new_Point2_.m +++ b/wrap/tests/expected/new_Point2_.m @@ -1,4 +1,4 @@ % automatically generated by wrap -function result = new_Point2_(obj) +function result = new_Point2_(obj,x,y) error('need to compile new_Point2_.cpp'); end diff --git a/wrap/tests/expected/new_Point2_dd.cpp b/wrap/tests/expected/new_Point2_dd.cpp deleted file mode 100644 index 7c7f062b7..000000000 --- a/wrap/tests/expected/new_Point2_dd.cpp +++ /dev/null @@ -1,11 +0,0 @@ -// automatically generated by wrap -#include -#include -void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) -{ - checkArguments("new_Point2_dd",nargout,nargin,2); - double x = unwrap< double >(in[0]); - double y = unwrap< double >(in[1]); - Point2* self = new Point2(x,y); - out[0] = wrap_constructed(self,"Point2"); -} diff --git a/wrap/tests/expected/new_Point2_dd.m b/wrap/tests/expected/new_Point2_dd.m deleted file mode 100644 index 4a769ce30..000000000 --- a/wrap/tests/expected/new_Point2_dd.m +++ /dev/null @@ -1,4 +0,0 @@ -% automatically generated by wrap -function result = new_Point2_dd(obj,x,y) - error('need to compile new_Point2_dd.cpp'); -end diff --git a/wrap/tests/expected/new_Point3_.cpp b/wrap/tests/expected/new_Point3_.cpp new file mode 100644 index 000000000..368b3069e --- /dev/null +++ b/wrap/tests/expected/new_Point3_.cpp @@ -0,0 +1,47 @@ +// automatically generated by wrap +#include +#include +#include +using namespace geometry; +typedef boost::shared_ptr Shared; + +static std::set collector; + +struct Destruct +{ + void operator() (Shared* p) + { + collector.erase(p); + } +}; + +void cleanup(void) { + std::for_each( collector.begin(), collector.end(), Destruct() ); +} +void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) +{ + mexAtExit(cleanup); + + const mxArray* input = in[0]; + Shared* self = *(Shared**) mxGetData(input); + + if(self) { + if(nargin > 1) { + collector.insert(self); + } + else if(collector.erase(self)) + delete self; + } else { + int nc = unwrap(in[1]); + if(nc == 0) { + double x = unwrap< double >(in[2]); + double y = unwrap< double >(in[3]); + double z = unwrap< double >(in[4]); + self = new Shared(new Point3(x,y,z)); + } + collector.insert(self); + std::cout << "constructed " << self << ", size=" << collector.size() << std::endl; + out[0] = mxCreateNumericMatrix(1, 1, mxUINT32OR64_CLASS, mxREAL); + *reinterpret_cast (mxGetPr(out[0])) = self; + } +} diff --git a/wrap/tests/expected/new_Point3_.m b/wrap/tests/expected/new_Point3_.m new file mode 100644 index 000000000..f306af227 --- /dev/null +++ b/wrap/tests/expected/new_Point3_.m @@ -0,0 +1,4 @@ +% automatically generated by wrap +function result = new_Point3_(obj,x,y,z) + error('need to compile new_Point3_.cpp'); +end diff --git a/wrap/tests/expected/new_Point3_ddd.cpp b/wrap/tests/expected/new_Point3_ddd.cpp deleted file mode 100644 index aa45dc71c..000000000 --- a/wrap/tests/expected/new_Point3_ddd.cpp +++ /dev/null @@ -1,13 +0,0 @@ -// automatically generated by wrap -#include -#include -using namespace geometry; -void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) -{ - checkArguments("new_Point3_ddd",nargout,nargin,3); - double x = unwrap< double >(in[0]); - double y = unwrap< double >(in[1]); - double z = unwrap< double >(in[2]); - Point3* self = new Point3(x,y,z); - out[0] = wrap_constructed(self,"Point3"); -} diff --git a/wrap/tests/expected/new_Point3_ddd.m b/wrap/tests/expected/new_Point3_ddd.m deleted file mode 100644 index 154dda1d0..000000000 --- a/wrap/tests/expected/new_Point3_ddd.m +++ /dev/null @@ -1,4 +0,0 @@ -% automatically generated by wrap -function result = new_Point3_ddd(obj,x,y,z) - error('need to compile new_Point3_ddd.cpp'); -end diff --git a/wrap/tests/expected/new_Test_.cpp b/wrap/tests/expected/new_Test_.cpp index 9c66706ae..a6bcc9549 100644 --- a/wrap/tests/expected/new_Test_.cpp +++ b/wrap/tests/expected/new_Test_.cpp @@ -1,10 +1,49 @@ // automatically generated by wrap #include +#include #include using namespace geometry; +typedef boost::shared_ptr Shared; + +static std::set collector; + +struct Destruct +{ + void operator() (Shared* p) + { + collector.erase(p); + } +}; + +void cleanup(void) { + std::for_each( collector.begin(), collector.end(), Destruct() ); +} void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { - checkArguments("new_Test_",nargout,nargin,0); - Test* self = new Test(); - out[0] = wrap_constructed(self,"Test"); + mexAtExit(cleanup); + + const mxArray* input = in[0]; + Shared* self = *(Shared**) mxGetData(input); + + if(self) { + if(nargin > 1) { + collector.insert(self); + } + else if(collector.erase(self)) + delete self; + } else { + int nc = unwrap(in[1]); + if(nc == 0) { + self = new Shared(new Test()); + } + if(nc == 1) { + double a = unwrap< double >(in[2]); + Matrix b = unwrap< Matrix >(in[3]); + self = new Shared(new Test(a,b)); + } + collector.insert(self); + std::cout << "constructed " << self << ", size=" << collector.size() << std::endl; + out[0] = mxCreateNumericMatrix(1, 1, mxUINT32OR64_CLASS, mxREAL); + *reinterpret_cast (mxGetPr(out[0])) = self; + } } diff --git a/wrap/tests/expected/new_Test_.m b/wrap/tests/expected/new_Test_.m index 33c465f8b..82faf0fd6 100644 --- a/wrap/tests/expected/new_Test_.m +++ b/wrap/tests/expected/new_Test_.m @@ -1,4 +1,4 @@ % automatically generated by wrap -function result = new_Test_(obj) +function result = new_Test_(obj,a,b) error('need to compile new_Test_.cpp'); end diff --git a/wrap/tests/expected/new_Test_dM.cpp b/wrap/tests/expected/new_Test_dM.cpp deleted file mode 100644 index e8a7c8de1..000000000 --- a/wrap/tests/expected/new_Test_dM.cpp +++ /dev/null @@ -1,12 +0,0 @@ -// automatically generated by wrap -#include -#include -using namespace geometry; -void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) -{ - checkArguments("new_Test_dM",nargout,nargin,2); - double a = unwrap< double >(in[0]); - Matrix b = unwrap< Matrix >(in[1]); - Test* self = new Test(a,b); - out[0] = wrap_constructed(self,"Test"); -} diff --git a/wrap/tests/expected/new_Test_dM.m b/wrap/tests/expected/new_Test_dM.m deleted file mode 100644 index c7009d6a9..000000000 --- a/wrap/tests/expected/new_Test_dM.m +++ /dev/null @@ -1,4 +0,0 @@ -% automatically generated by wrap -function result = new_Test_dM(obj,a,b) - error('need to compile new_Test_dM.cpp'); -end diff --git a/wrap/tests/expected_namespaces/@ClassD/ClassD.m b/wrap/tests/expected_namespaces/@ClassD/ClassD.m index 9e3ddf132..2a82b6bbf 100644 --- a/wrap/tests/expected_namespaces/@ClassD/ClassD.m +++ b/wrap/tests/expected_namespaces/@ClassD/ClassD.m @@ -5,11 +5,15 @@ classdef ClassD < handle end methods function obj = ClassD(varargin) - if (nargin == 0), obj.self = new_ClassD_(); end - if nargin ~= 13 && obj.self == 0, error('ClassD constructor failed'); end + if (nargin == 0), obj.self = new_ClassD_(0,0); end + if nargin ==14, new_ClassD_(varargin{1},0); end + if nargin ~= 13 && nargin ~= 14 && obj.self == 0, error('ClassD constructor failed'); end end function delete(obj) - delete_ClassD(obj); + if obj.self ~= 0 + new_ClassD_(obj.self); + obj.self = 0; + end end function display(obj), obj.print(''); end function disp(obj), obj.display; end diff --git a/wrap/tests/expected_namespaces/@ns1ClassA/ns1ClassA.m b/wrap/tests/expected_namespaces/@ns1ClassA/ns1ClassA.m index 806070a36..f1cc51eda 100644 --- a/wrap/tests/expected_namespaces/@ns1ClassA/ns1ClassA.m +++ b/wrap/tests/expected_namespaces/@ns1ClassA/ns1ClassA.m @@ -5,11 +5,15 @@ classdef ns1ClassA < handle end methods function obj = ns1ClassA(varargin) - if (nargin == 0), obj.self = new_ns1ClassA_(); end - if nargin ~= 13 && obj.self == 0, error('ns1ClassA constructor failed'); end + if (nargin == 0), obj.self = new_ns1ClassA_(0,0); end + if nargin ==14, new_ns1ClassA_(varargin{1},0); end + if nargin ~= 13 && nargin ~= 14 && obj.self == 0, error('ns1ClassA constructor failed'); end end function delete(obj) - delete_ns1ClassA(obj); + if obj.self ~= 0 + new_ns1ClassA_(obj.self); + obj.self = 0; + end end function display(obj), obj.print(''); end function disp(obj), obj.display; end diff --git a/wrap/tests/expected_namespaces/@ns1ClassB/ns1ClassB.m b/wrap/tests/expected_namespaces/@ns1ClassB/ns1ClassB.m index 13d5846ae..9403d5b7c 100644 --- a/wrap/tests/expected_namespaces/@ns1ClassB/ns1ClassB.m +++ b/wrap/tests/expected_namespaces/@ns1ClassB/ns1ClassB.m @@ -5,11 +5,15 @@ classdef ns1ClassB < handle end methods function obj = ns1ClassB(varargin) - if (nargin == 0), obj.self = new_ns1ClassB_(); end - if nargin ~= 13 && obj.self == 0, error('ns1ClassB constructor failed'); end + if (nargin == 0), obj.self = new_ns1ClassB_(0,0); end + if nargin ==14, new_ns1ClassB_(varargin{1},0); end + if nargin ~= 13 && nargin ~= 14 && obj.self == 0, error('ns1ClassB constructor failed'); end end function delete(obj) - delete_ns1ClassB(obj); + if obj.self ~= 0 + new_ns1ClassB_(obj.self); + obj.self = 0; + end end function display(obj), obj.print(''); end function disp(obj), obj.display; end diff --git a/wrap/tests/expected_namespaces/@ns2ClassA/memberFunction.cpp b/wrap/tests/expected_namespaces/@ns2ClassA/memberFunction.cpp index 514e5db08..668980943 100644 --- a/wrap/tests/expected_namespaces/@ns2ClassA/memberFunction.cpp +++ b/wrap/tests/expected_namespaces/@ns2ClassA/memberFunction.cpp @@ -1,11 +1,15 @@ // automatically generated by wrap #include +#include #include #include +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("memberFunction",nargout,nargin-1,0); - boost::shared_ptr self = unwrap_shared_ptr< ns2::ClassA >(in[0],"ns2ClassA"); - double result = self->memberFunction(); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; + double result = obj->memberFunction(); out[0] = wrap< double >(result); } diff --git a/wrap/tests/expected_namespaces/@ns2ClassA/ns2ClassA.m b/wrap/tests/expected_namespaces/@ns2ClassA/ns2ClassA.m index 188ac087d..b4c9de568 100644 --- a/wrap/tests/expected_namespaces/@ns2ClassA/ns2ClassA.m +++ b/wrap/tests/expected_namespaces/@ns2ClassA/ns2ClassA.m @@ -5,11 +5,15 @@ classdef ns2ClassA < handle end methods function obj = ns2ClassA(varargin) - if (nargin == 0), obj.self = new_ns2ClassA_(); end - if nargin ~= 13 && obj.self == 0, error('ns2ClassA constructor failed'); end + if (nargin == 0), obj.self = new_ns2ClassA_(0,0); end + if nargin ==14, new_ns2ClassA_(varargin{1},0); end + if nargin ~= 13 && nargin ~= 14 && obj.self == 0, error('ns2ClassA constructor failed'); end end function delete(obj) - delete_ns2ClassA(obj); + if obj.self ~= 0 + new_ns2ClassA_(obj.self); + obj.self = 0; + end end function display(obj), obj.print(''); end function disp(obj), obj.display; end diff --git a/wrap/tests/expected_namespaces/@ns2ClassA/nsArg.cpp b/wrap/tests/expected_namespaces/@ns2ClassA/nsArg.cpp index 789b0815e..a55fd5581 100644 --- a/wrap/tests/expected_namespaces/@ns2ClassA/nsArg.cpp +++ b/wrap/tests/expected_namespaces/@ns2ClassA/nsArg.cpp @@ -1,12 +1,16 @@ // automatically generated by wrap #include +#include #include #include +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("nsArg",nargout,nargin-1,1); - boost::shared_ptr self = unwrap_shared_ptr< ns2::ClassA >(in[0],"ns2ClassA"); - ns1::ClassB& arg = *unwrap_shared_ptr< ns1::ClassB >(in[1], "ns1ClassB"); - int result = self->nsArg(arg); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; + ns1::ClassB& arg = *unwrap_shared_ptr< ns1::ClassB >(in[1], "ns1ClassB"); + int result = obj->nsArg(arg); out[0] = wrap< int >(result); } diff --git a/wrap/tests/expected_namespaces/@ns2ClassA/nsReturn.cpp b/wrap/tests/expected_namespaces/@ns2ClassA/nsReturn.cpp index dbeb42f60..334bc9928 100644 --- a/wrap/tests/expected_namespaces/@ns2ClassA/nsReturn.cpp +++ b/wrap/tests/expected_namespaces/@ns2ClassA/nsReturn.cpp @@ -1,12 +1,18 @@ // automatically generated by wrap #include +#include #include #include +typedef boost::shared_ptr SharedClassB; +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("nsReturn",nargout,nargin-1,1); - boost::shared_ptr self = unwrap_shared_ptr< ns2::ClassA >(in[0],"ns2ClassA"); - double q = unwrap< double >(in[1]); - ns2::ns3::ClassB result = self->nsReturn(q); - out[0] = wrap_shared_ptr(boost::make_shared< ns2::ns3::ClassB >(result),"ns2ns3ClassB"); + mxArray* mxh = mxGetProperty(in[0],0,"self"); + Shared* self = *reinterpret_cast (mxGetPr(mxh)); + Shared obj = *self; + double q = unwrap< double >(in[1]); + ns2::ns3::ClassB result = obj->nsReturn(q); + SharedClassB* ret = new SharedClassB(new ns2::ns3::ClassB(result)); + out[0] = wrap_collect_shared_ptr(ret,"ns2ns3ClassB"); } diff --git a/wrap/tests/expected_namespaces/@ns2ClassC/ns2ClassC.m b/wrap/tests/expected_namespaces/@ns2ClassC/ns2ClassC.m index 793e73e64..13fbb49f3 100644 --- a/wrap/tests/expected_namespaces/@ns2ClassC/ns2ClassC.m +++ b/wrap/tests/expected_namespaces/@ns2ClassC/ns2ClassC.m @@ -5,11 +5,15 @@ classdef ns2ClassC < handle end methods function obj = ns2ClassC(varargin) - if (nargin == 0), obj.self = new_ns2ClassC_(); end - if nargin ~= 13 && obj.self == 0, error('ns2ClassC constructor failed'); end + if (nargin == 0), obj.self = new_ns2ClassC_(0,0); end + if nargin ==14, new_ns2ClassC_(varargin{1},0); end + if nargin ~= 13 && nargin ~= 14 && obj.self == 0, error('ns2ClassC constructor failed'); end end function delete(obj) - delete_ns2ClassC(obj); + if obj.self ~= 0 + new_ns2ClassC_(obj.self); + obj.self = 0; + end end function display(obj), obj.print(''); end function disp(obj), obj.display; end diff --git a/wrap/tests/expected_namespaces/@ns2ns3ClassB/ns2ns3ClassB.m b/wrap/tests/expected_namespaces/@ns2ns3ClassB/ns2ns3ClassB.m index 3997cd005..29e0721f0 100644 --- a/wrap/tests/expected_namespaces/@ns2ns3ClassB/ns2ns3ClassB.m +++ b/wrap/tests/expected_namespaces/@ns2ns3ClassB/ns2ns3ClassB.m @@ -5,11 +5,15 @@ classdef ns2ns3ClassB < handle end methods function obj = ns2ns3ClassB(varargin) - if (nargin == 0), obj.self = new_ns2ns3ClassB_(); end - if nargin ~= 13 && obj.self == 0, error('ns2ns3ClassB constructor failed'); end + if (nargin == 0), obj.self = new_ns2ns3ClassB_(0,0); end + if nargin ==14, new_ns2ns3ClassB_(varargin{1},0); end + if nargin ~= 13 && nargin ~= 14 && obj.self == 0, error('ns2ns3ClassB constructor failed'); end end function delete(obj) - delete_ns2ns3ClassB(obj); + if obj.self ~= 0 + new_ns2ns3ClassB_(obj.self); + obj.self = 0; + end end function display(obj), obj.print(''); end function disp(obj), obj.display; end diff --git a/wrap/tests/expected_namespaces/Makefile b/wrap/tests/expected_namespaces/Makefile index c48a1b154..dcc3b1dbd 100644 --- a/wrap/tests/expected_namespaces/Makefile +++ b/wrap/tests/expected_namespaces/Makefile @@ -9,24 +9,18 @@ all: ns1ClassA ns1ClassB ns2ClassA ns2ns3ClassB ns2ClassC ClassD # ns1ClassA new_ns1ClassA_.$(MEXENDING): new_ns1ClassA_.cpp $(MEX) $(mex_flags) new_ns1ClassA_.cpp -output new_ns1ClassA_ -delete_ns1ClassA.$(MEXENDING): delete_ns1ClassA.cpp - $(MEX) $(mex_flags) delete_ns1ClassA.cpp -output delete_ns1ClassA -ns1ClassA: new_ns1ClassA_.$(MEXENDING) delete_ns1ClassA.$(MEXENDING) +ns1ClassA: new_ns1ClassA_.$(MEXENDING) # ns1ClassB new_ns1ClassB_.$(MEXENDING): new_ns1ClassB_.cpp $(MEX) $(mex_flags) new_ns1ClassB_.cpp -output new_ns1ClassB_ -delete_ns1ClassB.$(MEXENDING): delete_ns1ClassB.cpp - $(MEX) $(mex_flags) delete_ns1ClassB.cpp -output delete_ns1ClassB -ns1ClassB: new_ns1ClassB_.$(MEXENDING) delete_ns1ClassB.$(MEXENDING) +ns1ClassB: new_ns1ClassB_.$(MEXENDING) # ns2ClassA new_ns2ClassA_.$(MEXENDING): new_ns2ClassA_.cpp $(MEX) $(mex_flags) new_ns2ClassA_.cpp -output new_ns2ClassA_ -delete_ns2ClassA.$(MEXENDING): delete_ns2ClassA.cpp - $(MEX) $(mex_flags) delete_ns2ClassA.cpp -output delete_ns2ClassA ns2ClassA_afunction.$(MEXENDING): ns2ClassA_afunction.cpp $(MEX) $(mex_flags) ns2ClassA_afunction.cpp -output ns2ClassA_afunction @ns2ClassA/memberFunction.$(MEXENDING): @ns2ClassA/memberFunction.cpp @@ -36,31 +30,25 @@ ns2ClassA_afunction.$(MEXENDING): ns2ClassA_afunction.cpp @ns2ClassA/nsReturn.$(MEXENDING): @ns2ClassA/nsReturn.cpp $(MEX) $(mex_flags) @ns2ClassA/nsReturn.cpp -output @ns2ClassA/nsReturn -ns2ClassA: new_ns2ClassA_.$(MEXENDING) delete_ns2ClassA.$(MEXENDING) ns2ClassA_afunction.$(MEXENDING) @ns2ClassA/memberFunction.$(MEXENDING) @ns2ClassA/nsArg.$(MEXENDING) @ns2ClassA/nsReturn.$(MEXENDING) +ns2ClassA: new_ns2ClassA_.$(MEXENDING) ns2ClassA_afunction.$(MEXENDING) @ns2ClassA/memberFunction.$(MEXENDING) @ns2ClassA/nsArg.$(MEXENDING) @ns2ClassA/nsReturn.$(MEXENDING) # ns2ns3ClassB new_ns2ns3ClassB_.$(MEXENDING): new_ns2ns3ClassB_.cpp $(MEX) $(mex_flags) new_ns2ns3ClassB_.cpp -output new_ns2ns3ClassB_ -delete_ns2ns3ClassB.$(MEXENDING): delete_ns2ns3ClassB.cpp - $(MEX) $(mex_flags) delete_ns2ns3ClassB.cpp -output delete_ns2ns3ClassB -ns2ns3ClassB: new_ns2ns3ClassB_.$(MEXENDING) delete_ns2ns3ClassB.$(MEXENDING) +ns2ns3ClassB: new_ns2ns3ClassB_.$(MEXENDING) # ns2ClassC new_ns2ClassC_.$(MEXENDING): new_ns2ClassC_.cpp $(MEX) $(mex_flags) new_ns2ClassC_.cpp -output new_ns2ClassC_ -delete_ns2ClassC.$(MEXENDING): delete_ns2ClassC.cpp - $(MEX) $(mex_flags) delete_ns2ClassC.cpp -output delete_ns2ClassC -ns2ClassC: new_ns2ClassC_.$(MEXENDING) delete_ns2ClassC.$(MEXENDING) +ns2ClassC: new_ns2ClassC_.$(MEXENDING) # ClassD new_ClassD_.$(MEXENDING): new_ClassD_.cpp $(MEX) $(mex_flags) new_ClassD_.cpp -output new_ClassD_ -delete_ClassD.$(MEXENDING): delete_ClassD.cpp - $(MEX) $(mex_flags) delete_ClassD.cpp -output delete_ClassD -ClassD: new_ClassD_.$(MEXENDING) delete_ClassD.$(MEXENDING) +ClassD: new_ClassD_.$(MEXENDING) diff --git a/wrap/tests/expected_namespaces/delete_ClassD.cpp b/wrap/tests/expected_namespaces/delete_ClassD.cpp deleted file mode 100644 index 5284e33ba..000000000 --- a/wrap/tests/expected_namespaces/delete_ClassD.cpp +++ /dev/null @@ -1,8 +0,0 @@ -// automatically generated by wrap -#include -#include -void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) -{ - checkArguments("delete_ClassD",nargout,nargin,1); - delete_shared_ptr< ClassD >(in[0],"ClassD"); -} diff --git a/wrap/tests/expected_namespaces/delete_ClassD.m b/wrap/tests/expected_namespaces/delete_ClassD.m deleted file mode 100644 index aef8cb642..000000000 --- a/wrap/tests/expected_namespaces/delete_ClassD.m +++ /dev/null @@ -1,4 +0,0 @@ -% automatically generated by wrap -function result = delete_ClassD(obj) - error('need to compile delete_ClassD.cpp'); -end diff --git a/wrap/tests/expected_namespaces/delete_ns1ClassA.cpp b/wrap/tests/expected_namespaces/delete_ns1ClassA.cpp deleted file mode 100644 index 17a25b523..000000000 --- a/wrap/tests/expected_namespaces/delete_ns1ClassA.cpp +++ /dev/null @@ -1,8 +0,0 @@ -// automatically generated by wrap -#include -#include -void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) -{ - checkArguments("delete_ns1ClassA",nargout,nargin,1); - delete_shared_ptr< ns1::ClassA >(in[0],"ns1ClassA"); -} diff --git a/wrap/tests/expected_namespaces/delete_ns1ClassA.m b/wrap/tests/expected_namespaces/delete_ns1ClassA.m deleted file mode 100644 index 343d5636a..000000000 --- a/wrap/tests/expected_namespaces/delete_ns1ClassA.m +++ /dev/null @@ -1,4 +0,0 @@ -% automatically generated by wrap -function result = delete_ns1ClassA(obj) - error('need to compile delete_ns1ClassA.cpp'); -end diff --git a/wrap/tests/expected_namespaces/delete_ns1ClassB.cpp b/wrap/tests/expected_namespaces/delete_ns1ClassB.cpp deleted file mode 100644 index 7302cc3d3..000000000 --- a/wrap/tests/expected_namespaces/delete_ns1ClassB.cpp +++ /dev/null @@ -1,9 +0,0 @@ -// automatically generated by wrap -#include -#include -#include -void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) -{ - checkArguments("delete_ns1ClassB",nargout,nargin,1); - delete_shared_ptr< ns1::ClassB >(in[0],"ns1ClassB"); -} diff --git a/wrap/tests/expected_namespaces/delete_ns1ClassB.m b/wrap/tests/expected_namespaces/delete_ns1ClassB.m deleted file mode 100644 index ec50f3f06..000000000 --- a/wrap/tests/expected_namespaces/delete_ns1ClassB.m +++ /dev/null @@ -1,4 +0,0 @@ -% automatically generated by wrap -function result = delete_ns1ClassB(obj) - error('need to compile delete_ns1ClassB.cpp'); -end diff --git a/wrap/tests/expected_namespaces/delete_ns2ClassA.cpp b/wrap/tests/expected_namespaces/delete_ns2ClassA.cpp deleted file mode 100644 index 0562ee073..000000000 --- a/wrap/tests/expected_namespaces/delete_ns2ClassA.cpp +++ /dev/null @@ -1,9 +0,0 @@ -// automatically generated by wrap -#include -#include -#include -void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) -{ - checkArguments("delete_ns2ClassA",nargout,nargin,1); - delete_shared_ptr< ns2::ClassA >(in[0],"ns2ClassA"); -} diff --git a/wrap/tests/expected_namespaces/delete_ns2ClassA.m b/wrap/tests/expected_namespaces/delete_ns2ClassA.m deleted file mode 100644 index 4f1b92aa5..000000000 --- a/wrap/tests/expected_namespaces/delete_ns2ClassA.m +++ /dev/null @@ -1,4 +0,0 @@ -% automatically generated by wrap -function result = delete_ns2ClassA(obj) - error('need to compile delete_ns2ClassA.cpp'); -end diff --git a/wrap/tests/expected_namespaces/delete_ns2ClassC.cpp b/wrap/tests/expected_namespaces/delete_ns2ClassC.cpp deleted file mode 100644 index ef57796b7..000000000 --- a/wrap/tests/expected_namespaces/delete_ns2ClassC.cpp +++ /dev/null @@ -1,8 +0,0 @@ -// automatically generated by wrap -#include -#include -void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) -{ - checkArguments("delete_ns2ClassC",nargout,nargin,1); - delete_shared_ptr< ns2::ClassC >(in[0],"ns2ClassC"); -} diff --git a/wrap/tests/expected_namespaces/delete_ns2ClassC.m b/wrap/tests/expected_namespaces/delete_ns2ClassC.m deleted file mode 100644 index 1db1ddc93..000000000 --- a/wrap/tests/expected_namespaces/delete_ns2ClassC.m +++ /dev/null @@ -1,4 +0,0 @@ -% automatically generated by wrap -function result = delete_ns2ClassC(obj) - error('need to compile delete_ns2ClassC.cpp'); -end diff --git a/wrap/tests/expected_namespaces/delete_ns2ns3ClassB.cpp b/wrap/tests/expected_namespaces/delete_ns2ns3ClassB.cpp deleted file mode 100644 index 0a6c4ce73..000000000 --- a/wrap/tests/expected_namespaces/delete_ns2ns3ClassB.cpp +++ /dev/null @@ -1,9 +0,0 @@ -// automatically generated by wrap -#include -#include -#include -void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) -{ - checkArguments("delete_ns2ns3ClassB",nargout,nargin,1); - delete_shared_ptr< ns2::ns3::ClassB >(in[0],"ns2ns3ClassB"); -} diff --git a/wrap/tests/expected_namespaces/delete_ns2ns3ClassB.m b/wrap/tests/expected_namespaces/delete_ns2ns3ClassB.m deleted file mode 100644 index 427359eca..000000000 --- a/wrap/tests/expected_namespaces/delete_ns2ns3ClassB.m +++ /dev/null @@ -1,4 +0,0 @@ -% automatically generated by wrap -function result = delete_ns2ns3ClassB(obj) - error('need to compile delete_ns2ns3ClassB.cpp'); -end diff --git a/wrap/tests/expected_namespaces/make_testNamespaces.m b/wrap/tests/expected_namespaces/make_testNamespaces.m index d835a2da0..5ff13e5d4 100644 --- a/wrap/tests/expected_namespaces/make_testNamespaces.m +++ b/wrap/tests/expected_namespaces/make_testNamespaces.m @@ -10,21 +10,18 @@ addpath(toolboxpath); %% ns1ClassA cd(toolboxpath) mex -O5 new_ns1ClassA_.cpp -mex -O5 delete_ns1ClassA.cpp cd @ns1ClassA %% ns1ClassB cd(toolboxpath) mex -O5 new_ns1ClassB_.cpp -mex -O5 delete_ns1ClassB.cpp cd @ns1ClassB %% ns2ClassA cd(toolboxpath) mex -O5 new_ns2ClassA_.cpp -mex -O5 delete_ns2ClassA.cpp mex -O5 ns2ClassA_afunction.cpp cd @ns2ClassA @@ -35,21 +32,18 @@ mex -O5 nsReturn.cpp %% ns2ns3ClassB cd(toolboxpath) mex -O5 new_ns2ns3ClassB_.cpp -mex -O5 delete_ns2ns3ClassB.cpp cd @ns2ns3ClassB %% ns2ClassC cd(toolboxpath) mex -O5 new_ns2ClassC_.cpp -mex -O5 delete_ns2ClassC.cpp cd @ns2ClassC %% ClassD cd(toolboxpath) mex -O5 new_ClassD_.cpp -mex -O5 delete_ClassD.cpp cd @ClassD diff --git a/wrap/tests/expected_namespaces/new_ClassD_.cpp b/wrap/tests/expected_namespaces/new_ClassD_.cpp index 59ea4398b..352c470b0 100644 --- a/wrap/tests/expected_namespaces/new_ClassD_.cpp +++ b/wrap/tests/expected_namespaces/new_ClassD_.cpp @@ -1,9 +1,43 @@ // automatically generated by wrap #include +#include #include +typedef boost::shared_ptr Shared; + +static std::set collector; + +struct Destruct +{ + void operator() (Shared* p) + { + collector.erase(p); + } +}; + +void cleanup(void) { + std::for_each( collector.begin(), collector.end(), Destruct() ); +} void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { - checkArguments("new_ClassD_",nargout,nargin,0); - ClassD* self = new ClassD(); - out[0] = wrap_constructed(self,"ClassD"); + mexAtExit(cleanup); + + const mxArray* input = in[0]; + Shared* self = *(Shared**) mxGetData(input); + + if(self) { + if(nargin > 1) { + collector.insert(self); + } + else if(collector.erase(self)) + delete self; + } else { + int nc = unwrap(in[1]); + if(nc == 0) { + self = new Shared(new ClassD()); + } + collector.insert(self); + std::cout << "constructed " << self << ", size=" << collector.size() << std::endl; + out[0] = mxCreateNumericMatrix(1, 1, mxUINT32OR64_CLASS, mxREAL); + *reinterpret_cast (mxGetPr(out[0])) = self; + } } diff --git a/wrap/tests/expected_namespaces/new_ns1ClassA_.cpp b/wrap/tests/expected_namespaces/new_ns1ClassA_.cpp index cbb82eb70..893331034 100644 --- a/wrap/tests/expected_namespaces/new_ns1ClassA_.cpp +++ b/wrap/tests/expected_namespaces/new_ns1ClassA_.cpp @@ -1,9 +1,43 @@ // automatically generated by wrap #include +#include #include +typedef boost::shared_ptr Shared; + +static std::set collector; + +struct Destruct +{ + void operator() (Shared* p) + { + collector.erase(p); + } +}; + +void cleanup(void) { + std::for_each( collector.begin(), collector.end(), Destruct() ); +} void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { - checkArguments("new_ns1ClassA_",nargout,nargin,0); - ns1::ClassA* self = new ns1::ClassA(); - out[0] = wrap_constructed(self,"ns1ClassA"); + mexAtExit(cleanup); + + const mxArray* input = in[0]; + Shared* self = *(Shared**) mxGetData(input); + + if(self) { + if(nargin > 1) { + collector.insert(self); + } + else if(collector.erase(self)) + delete self; + } else { + int nc = unwrap(in[1]); + if(nc == 0) { + self = new Shared(new ns1::ClassA()); + } + collector.insert(self); + std::cout << "constructed " << self << ", size=" << collector.size() << std::endl; + out[0] = mxCreateNumericMatrix(1, 1, mxUINT32OR64_CLASS, mxREAL); + *reinterpret_cast (mxGetPr(out[0])) = self; + } } diff --git a/wrap/tests/expected_namespaces/new_ns1ClassB_.cpp b/wrap/tests/expected_namespaces/new_ns1ClassB_.cpp index d50cede19..047348d1b 100644 --- a/wrap/tests/expected_namespaces/new_ns1ClassB_.cpp +++ b/wrap/tests/expected_namespaces/new_ns1ClassB_.cpp @@ -1,10 +1,44 @@ // automatically generated by wrap #include +#include #include #include +typedef boost::shared_ptr Shared; + +static std::set collector; + +struct Destruct +{ + void operator() (Shared* p) + { + collector.erase(p); + } +}; + +void cleanup(void) { + std::for_each( collector.begin(), collector.end(), Destruct() ); +} void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { - checkArguments("new_ns1ClassB_",nargout,nargin,0); - ns1::ClassB* self = new ns1::ClassB(); - out[0] = wrap_constructed(self,"ns1ClassB"); + mexAtExit(cleanup); + + const mxArray* input = in[0]; + Shared* self = *(Shared**) mxGetData(input); + + if(self) { + if(nargin > 1) { + collector.insert(self); + } + else if(collector.erase(self)) + delete self; + } else { + int nc = unwrap(in[1]); + if(nc == 0) { + self = new Shared(new ns1::ClassB()); + } + collector.insert(self); + std::cout << "constructed " << self << ", size=" << collector.size() << std::endl; + out[0] = mxCreateNumericMatrix(1, 1, mxUINT32OR64_CLASS, mxREAL); + *reinterpret_cast (mxGetPr(out[0])) = self; + } } diff --git a/wrap/tests/expected_namespaces/new_ns2ClassA_.cpp b/wrap/tests/expected_namespaces/new_ns2ClassA_.cpp index 81bae3198..cb06bf892 100644 --- a/wrap/tests/expected_namespaces/new_ns2ClassA_.cpp +++ b/wrap/tests/expected_namespaces/new_ns2ClassA_.cpp @@ -1,10 +1,44 @@ // automatically generated by wrap #include +#include #include #include +typedef boost::shared_ptr Shared; + +static std::set collector; + +struct Destruct +{ + void operator() (Shared* p) + { + collector.erase(p); + } +}; + +void cleanup(void) { + std::for_each( collector.begin(), collector.end(), Destruct() ); +} void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { - checkArguments("new_ns2ClassA_",nargout,nargin,0); - ns2::ClassA* self = new ns2::ClassA(); - out[0] = wrap_constructed(self,"ns2ClassA"); + mexAtExit(cleanup); + + const mxArray* input = in[0]; + Shared* self = *(Shared**) mxGetData(input); + + if(self) { + if(nargin > 1) { + collector.insert(self); + } + else if(collector.erase(self)) + delete self; + } else { + int nc = unwrap(in[1]); + if(nc == 0) { + self = new Shared(new ns2::ClassA()); + } + collector.insert(self); + std::cout << "constructed " << self << ", size=" << collector.size() << std::endl; + out[0] = mxCreateNumericMatrix(1, 1, mxUINT32OR64_CLASS, mxREAL); + *reinterpret_cast (mxGetPr(out[0])) = self; + } } diff --git a/wrap/tests/expected_namespaces/new_ns2ClassC_.cpp b/wrap/tests/expected_namespaces/new_ns2ClassC_.cpp index fbee07926..40c3343ef 100644 --- a/wrap/tests/expected_namespaces/new_ns2ClassC_.cpp +++ b/wrap/tests/expected_namespaces/new_ns2ClassC_.cpp @@ -1,9 +1,43 @@ // automatically generated by wrap #include +#include #include +typedef boost::shared_ptr Shared; + +static std::set collector; + +struct Destruct +{ + void operator() (Shared* p) + { + collector.erase(p); + } +}; + +void cleanup(void) { + std::for_each( collector.begin(), collector.end(), Destruct() ); +} void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { - checkArguments("new_ns2ClassC_",nargout,nargin,0); - ns2::ClassC* self = new ns2::ClassC(); - out[0] = wrap_constructed(self,"ns2ClassC"); + mexAtExit(cleanup); + + const mxArray* input = in[0]; + Shared* self = *(Shared**) mxGetData(input); + + if(self) { + if(nargin > 1) { + collector.insert(self); + } + else if(collector.erase(self)) + delete self; + } else { + int nc = unwrap(in[1]); + if(nc == 0) { + self = new Shared(new ns2::ClassC()); + } + collector.insert(self); + std::cout << "constructed " << self << ", size=" << collector.size() << std::endl; + out[0] = mxCreateNumericMatrix(1, 1, mxUINT32OR64_CLASS, mxREAL); + *reinterpret_cast (mxGetPr(out[0])) = self; + } } diff --git a/wrap/tests/expected_namespaces/new_ns2ns3ClassB_.cpp b/wrap/tests/expected_namespaces/new_ns2ns3ClassB_.cpp index ca9d02df3..ace0a261f 100644 --- a/wrap/tests/expected_namespaces/new_ns2ns3ClassB_.cpp +++ b/wrap/tests/expected_namespaces/new_ns2ns3ClassB_.cpp @@ -1,10 +1,44 @@ // automatically generated by wrap #include +#include #include #include +typedef boost::shared_ptr Shared; + +static std::set collector; + +struct Destruct +{ + void operator() (Shared* p) + { + collector.erase(p); + } +}; + +void cleanup(void) { + std::for_each( collector.begin(), collector.end(), Destruct() ); +} void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { - checkArguments("new_ns2ns3ClassB_",nargout,nargin,0); - ns2::ns3::ClassB* self = new ns2::ns3::ClassB(); - out[0] = wrap_constructed(self,"ns2ns3ClassB"); + mexAtExit(cleanup); + + const mxArray* input = in[0]; + Shared* self = *(Shared**) mxGetData(input); + + if(self) { + if(nargin > 1) { + collector.insert(self); + } + else if(collector.erase(self)) + delete self; + } else { + int nc = unwrap(in[1]); + if(nc == 0) { + self = new Shared(new ns2::ns3::ClassB()); + } + collector.insert(self); + std::cout << "constructed " << self << ", size=" << collector.size() << std::endl; + out[0] = mxCreateNumericMatrix(1, 1, mxUINT32OR64_CLASS, mxREAL); + *reinterpret_cast (mxGetPr(out[0])) = self; + } } diff --git a/wrap/tests/expected_namespaces/ns2ClassA_afunction.cpp b/wrap/tests/expected_namespaces/ns2ClassA_afunction.cpp index 72559acf8..3e8d54a14 100644 --- a/wrap/tests/expected_namespaces/ns2ClassA_afunction.cpp +++ b/wrap/tests/expected_namespaces/ns2ClassA_afunction.cpp @@ -1,7 +1,10 @@ // automatically generated by wrap #include +#include #include #include +typedef boost::shared_ptr Shareddouble; +typedef boost::shared_ptr Shared; void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[]) { checkArguments("ns2ClassA_afunction",nargout,nargin,0); diff --git a/wrap/tests/testWrap.cpp b/wrap/tests/testWrap.cpp index db3ac8982..cdc6e42d6 100644 --- a/wrap/tests/testWrap.cpp +++ b/wrap/tests/testWrap.cpp @@ -83,7 +83,7 @@ TEST( wrap, parse ) { { Class cls = module.classes.at(0); EXPECT(assert_equal("Point2", cls.name)); - EXPECT_LONGS_EQUAL(2, cls.constructors.size()); + EXPECT_LONGS_EQUAL(2, cls.constructor.args_list.size()); EXPECT_LONGS_EQUAL(7, cls.methods.size()); EXPECT_LONGS_EQUAL(0, cls.static_methods.size()); EXPECT_LONGS_EQUAL(0, cls.namespaces.size()); @@ -94,18 +94,18 @@ TEST( wrap, parse ) { { Class cls = module.classes.at(1); EXPECT(assert_equal("Point3", cls.name)); - EXPECT_LONGS_EQUAL(1, cls.constructors.size()); + EXPECT_LONGS_EQUAL(1, cls.constructor.args_list.size()); EXPECT_LONGS_EQUAL(1, cls.methods.size()); EXPECT_LONGS_EQUAL(2, cls.static_methods.size()); EXPECT_LONGS_EQUAL(0, cls.namespaces.size()); EXPECT(assert_equal(exp_using2, cls.using_namespaces)); // first constructor takes 3 doubles - Constructor c1 = cls.constructors.front(); - EXPECT_LONGS_EQUAL(3, c1.args.size()); + ArgumentList c1 = cls.constructor.args_list.front(); + EXPECT_LONGS_EQUAL(3, c1.size()); // check first double argument - Argument a1 = c1.args.front(); + Argument a1 = c1.front(); EXPECT(!a1.is_const); EXPECT(assert_equal("double", a1.type)); EXPECT(!a1.is_ref); @@ -123,7 +123,7 @@ TEST( wrap, parse ) { { LONGS_EQUAL(3, module.classes.size()); Class testCls = module.classes.at(2); - EXPECT_LONGS_EQUAL( 2, testCls.constructors.size()); + EXPECT_LONGS_EQUAL( 2, testCls.constructor.args_list.size()); EXPECT_LONGS_EQUAL(19, testCls.methods.size()); EXPECT_LONGS_EQUAL( 0, testCls.static_methods.size()); EXPECT_LONGS_EQUAL( 0, testCls.namespaces.size()); @@ -228,18 +228,6 @@ TEST( wrap, matlab_code_namespaces ) { EXPECT(files_equal(exp_path + "new_ns2ClassC_.m" , act_path + "new_ns2ClassC_.m" )); EXPECT(files_equal(exp_path + "new_ns2ns3ClassB_.cpp" , act_path + "new_ns2ns3ClassB_.cpp" )); EXPECT(files_equal(exp_path + "new_ns2ns3ClassB_.m" , act_path + "new_ns2ns3ClassB_.m" )); - EXPECT(files_equal(exp_path + "delete_ClassD.cpp" , act_path + "delete_ClassD.cpp" )); - EXPECT(files_equal(exp_path + "delete_ClassD.m" , act_path + "delete_ClassD.m" )); - EXPECT(files_equal(exp_path + "delete_ns1ClassA.cpp" , act_path + "delete_ns1ClassA.cpp" )); - EXPECT(files_equal(exp_path + "delete_ns1ClassA.m" , act_path + "delete_ns1ClassA.m" )); - EXPECT(files_equal(exp_path + "delete_ns1ClassB.cpp" , act_path + "delete_ns1ClassB.cpp" )); - EXPECT(files_equal(exp_path + "delete_ns1ClassB.m" , act_path + "delete_ns1ClassB.m" )); - EXPECT(files_equal(exp_path + "delete_ns2ClassA.cpp" , act_path + "delete_ns2ClassA.cpp" )); - EXPECT(files_equal(exp_path + "delete_ns2ClassA.m" , act_path + "delete_ns2ClassA.m" )); - EXPECT(files_equal(exp_path + "delete_ns2ClassC.cpp" , act_path + "delete_ns2ClassC.cpp" )); - EXPECT(files_equal(exp_path + "delete_ns2ClassC.m" , act_path + "delete_ns2ClassC.m" )); - EXPECT(files_equal(exp_path + "delete_ns2ns3ClassB.cpp" , act_path + "delete_ns2ns3ClassB.cpp" )); - EXPECT(files_equal(exp_path + "delete_ns2ns3ClassB.m" , act_path + "delete_ns2ns3ClassB.m" )); EXPECT(files_equal(exp_path + "ns2ClassA_afunction.cpp" , act_path + "ns2ClassA_afunction.cpp" )); EXPECT(files_equal(exp_path + "ns2ClassA_afunction.m" , act_path + "ns2ClassA_afunction.m" )); @@ -268,34 +256,82 @@ TEST( wrap, matlab_code ) { // emit MATLAB code // make_geometry will not compile, use make testwrap to generate real make module.matlab_code("mex", "actual", "mexa64", "-O5"); + string epath = path + "/tests/expected/"; + string apath = "actual/"; - EXPECT(files_equal(path + "/tests/expected/@Point2/Point2.m" , "actual/@Point2/Point2.m" )); - EXPECT(files_equal(path + "/tests/expected/@Point2/x.cpp" , "actual/@Point2/x.cpp" )); - EXPECT(files_equal(path + "/tests/expected/@Point3/Point3.m" , "actual/@Point3/Point3.m" )); - EXPECT(files_equal(path + "/tests/expected/new_Point3_ddd.m" , "actual/new_Point3_ddd.m" )); - EXPECT(files_equal(path + "/tests/expected/new_Point3_ddd.cpp", "actual/new_Point3_ddd.cpp")); - EXPECT(files_equal(path + "/tests/expected/Point3_staticFunction.m" , "actual/Point3_staticFunction.m" )); - EXPECT(files_equal(path + "/tests/expected/Point3_staticFunction.cpp", "actual/Point3_staticFunction.cpp")); - EXPECT(files_equal(path + "/tests/expected/@Point3/norm.m" , "actual/@Point3/norm.m" )); - EXPECT(files_equal(path + "/tests/expected/@Point3/norm.cpp" , "actual/@Point3/norm.cpp" )); + EXPECT(files_equal(epath + "Makefile" , apath + "Makefile" )); + EXPECT(files_equal(epath + "make_geometry.m" , apath + "make_geometry.m" )); + EXPECT(files_equal(epath + "new_Point2_.cpp" , apath + "new_Point2_.cpp" )); + EXPECT(files_equal(epath + "new_Point2_.m" , apath + "new_Point2_.m" )); + EXPECT(files_equal(epath + "new_Point3_.cpp" , apath + "new_Point3_.cpp" )); + EXPECT(files_equal(epath + "new_Point3_.m" , apath + "new_Point3_.m" )); + EXPECT(files_equal(epath + "new_Test_.cpp" , apath + "new_Test_.cpp" )); + EXPECT(files_equal(epath + "new_Test_.m" , apath + "new_Test_.m" )); - EXPECT(files_equal(path + "/tests/expected/new_Test_.cpp" , "actual/new_Test_.cpp" )); - EXPECT(files_equal(path + "/tests/expected/delete_Test.cpp" , "actual/delete_Test.cpp" )); - EXPECT(files_equal(path + "/tests/expected/delete_Test.m" , "actual/delete_Test.m" )); - EXPECT(files_equal(path + "/tests/expected/@Test/Test.m" , "actual/@Test/Test.m" )); - EXPECT(files_equal(path + "/tests/expected/@Test/return_string.cpp" , "actual/@Test/return_string.cpp" )); - EXPECT(files_equal(path + "/tests/expected/@Test/return_pair.cpp" , "actual/@Test/return_pair.cpp" )); - EXPECT(files_equal(path + "/tests/expected/@Test/create_MixedPtrs.cpp", "actual/@Test/create_MixedPtrs.cpp")); - EXPECT(files_equal(path + "/tests/expected/@Test/return_field.cpp" , "actual/@Test/return_field.cpp" )); - EXPECT(files_equal(path + "/tests/expected/@Test/return_TestPtr.cpp", "actual/@Test/return_TestPtr.cpp")); - EXPECT(files_equal(path + "/tests/expected/@Test/return_Test.cpp" , "actual/@Test/return_Test.cpp" )); - EXPECT(files_equal(path + "/tests/expected/@Test/return_Point2Ptr.cpp", "actual/@Test/return_Point2Ptr.cpp")); - EXPECT(files_equal(path + "/tests/expected/@Test/return_ptrs.cpp" , "actual/@Test/return_ptrs.cpp" )); - EXPECT(files_equal(path + "/tests/expected/@Test/print.m" , "actual/@Test/print.m" )); - EXPECT(files_equal(path + "/tests/expected/@Test/print.cpp" , "actual/@Test/print.cpp" )); + EXPECT(files_equal(epath + "Point3_staticFunction.cpp" , apath + "Point3_staticFunction.cpp" )); + EXPECT(files_equal(epath + "Point3_staticFunction.m" , apath + "Point3_staticFunction.m" )); + EXPECT(files_equal(epath + "Point3_StaticFunctionRet.cpp" , apath + "Point3_StaticFunctionRet.cpp" )); + EXPECT(files_equal(epath + "Point3_StaticFunctionRet.m" , apath + "Point3_StaticFunctionRet.m" )); + + EXPECT(files_equal(epath + "@Point2/argChar.cpp" , apath + "@Point2/argChar.cpp" )); + EXPECT(files_equal(epath + "@Point2/argChar.m" , apath + "@Point2/argChar.m" )); + EXPECT(files_equal(epath + "@Point2/argUChar.cpp" , apath + "@Point2/argUChar.cpp" )); + EXPECT(files_equal(epath + "@Point2/argUChar.m" , apath + "@Point2/argUChar.m" )); + EXPECT(files_equal(epath + "@Point2/dim.cpp" , apath + "@Point2/dim.cpp" )); + EXPECT(files_equal(epath + "@Point2/dim.m" , apath + "@Point2/dim.m" )); + EXPECT(files_equal(epath + "@Point2/Point2.m" , apath + "@Point2/Point2.m" )); + EXPECT(files_equal(epath + "@Point2/returnChar.cpp" , apath + "@Point2/returnChar.cpp" )); + EXPECT(files_equal(epath + "@Point2/returnChar.m" , apath + "@Point2/returnChar.m" )); + EXPECT(files_equal(epath + "@Point2/vectorConfusion.cpp" , apath + "@Point2/vectorConfusion.cpp" )); + EXPECT(files_equal(epath + "@Point2/vectorConfusion.m" , apath + "@Point2/vectorConfusion.m" )); + EXPECT(files_equal(epath + "@Point2/x.cpp" , apath + "@Point2/x.cpp" )); + EXPECT(files_equal(epath + "@Point2/x.m" , apath + "@Point2/x.m" )); + EXPECT(files_equal(epath + "@Point2/y.cpp" , apath + "@Point2/y.cpp" )); + EXPECT(files_equal(epath + "@Point2/y.m" , apath + "@Point2/y.m" )); + EXPECT(files_equal(epath + "@Point3/norm.cpp" , apath + "@Point3/norm.cpp" )); + EXPECT(files_equal(epath + "@Point3/norm.m" , apath + "@Point3/norm.m" )); + EXPECT(files_equal(epath + "@Point3/Point3.m" , apath + "@Point3/Point3.m" )); + + EXPECT(files_equal(epath + "@Test/arg_EigenConstRef.cpp" , apath + "@Test/arg_EigenConstRef.cpp" )); + EXPECT(files_equal(epath + "@Test/arg_EigenConstRef.m" , apath + "@Test/arg_EigenConstRef.m" )); + EXPECT(files_equal(epath + "@Test/create_MixedPtrs.cpp" , apath + "@Test/create_MixedPtrs.cpp" )); + EXPECT(files_equal(epath + "@Test/create_MixedPtrs.m" , apath + "@Test/create_MixedPtrs.m" )); + EXPECT(files_equal(epath + "@Test/create_ptrs.cpp" , apath + "@Test/create_ptrs.cpp" )); + EXPECT(files_equal(epath + "@Test/create_ptrs.m" , apath + "@Test/create_ptrs.m" )); + EXPECT(files_equal(epath + "@Test/print.cpp" , apath + "@Test/print.cpp" )); + EXPECT(files_equal(epath + "@Test/print.m" , apath + "@Test/print.m" )); + EXPECT(files_equal(epath + "@Test/return_bool.cpp" , apath + "@Test/return_bool.cpp" )); + EXPECT(files_equal(epath + "@Test/return_bool.m" , apath + "@Test/return_bool.m" )); + EXPECT(files_equal(epath + "@Test/return_double.cpp" , apath + "@Test/return_double.cpp" )); + EXPECT(files_equal(epath + "@Test/return_double.m" , apath + "@Test/return_double.m" )); + EXPECT(files_equal(epath + "@Test/return_field.cpp" , apath + "@Test/return_field.cpp" )); + EXPECT(files_equal(epath + "@Test/return_field.m" , apath + "@Test/return_field.m" )); + EXPECT(files_equal(epath + "@Test/return_int.cpp" , apath + "@Test/return_int.cpp" )); + EXPECT(files_equal(epath + "@Test/return_int.m" , apath + "@Test/return_int.m" )); + EXPECT(files_equal(epath + "@Test/return_matrix1.cpp" , apath + "@Test/return_matrix1.cpp" )); + EXPECT(files_equal(epath + "@Test/return_matrix1.m" , apath + "@Test/return_matrix1.m" )); + EXPECT(files_equal(epath + "@Test/return_matrix2.cpp" , apath + "@Test/return_matrix2.cpp" )); + EXPECT(files_equal(epath + "@Test/return_matrix2.m" , apath + "@Test/return_matrix2.m" )); + EXPECT(files_equal(epath + "@Test/return_pair.cpp" , apath + "@Test/return_pair.cpp" )); + EXPECT(files_equal(epath + "@Test/return_pair.m" , apath + "@Test/return_pair.m" )); + EXPECT(files_equal(epath + "@Test/return_Point2Ptr.cpp" , apath + "@Test/return_Point2Ptr.cpp" )); + EXPECT(files_equal(epath + "@Test/return_Point2Ptr.m" , apath + "@Test/return_Point2Ptr.m" )); + EXPECT(files_equal(epath + "@Test/return_ptrs.cpp" , apath + "@Test/return_ptrs.cpp" )); + EXPECT(files_equal(epath + "@Test/return_ptrs.m" , apath + "@Test/return_ptrs.m" )); + EXPECT(files_equal(epath + "@Test/return_size_t.cpp" , apath + "@Test/return_size_t.cpp" )); + EXPECT(files_equal(epath + "@Test/return_size_t.m" , apath + "@Test/return_size_t.m" )); + EXPECT(files_equal(epath + "@Test/return_string.cpp" , apath + "@Test/return_string.cpp" )); + EXPECT(files_equal(epath + "@Test/return_string.m" , apath + "@Test/return_string.m" )); + EXPECT(files_equal(epath + "@Test/return_Test.cpp" , apath + "@Test/return_Test.cpp" )); + EXPECT(files_equal(epath + "@Test/return_Test.m" , apath + "@Test/return_Test.m" )); + EXPECT(files_equal(epath + "@Test/return_TestPtr.cpp" , apath + "@Test/return_TestPtr.cpp" )); + EXPECT(files_equal(epath + "@Test/return_TestPtr.m" , apath + "@Test/return_TestPtr.m" )); + EXPECT(files_equal(epath + "@Test/return_vector1.cpp" , apath + "@Test/return_vector1.cpp" )); + EXPECT(files_equal(epath + "@Test/return_vector1.m" , apath + "@Test/return_vector1.m" )); + EXPECT(files_equal(epath + "@Test/return_vector2.cpp" , apath + "@Test/return_vector2.cpp" )); + EXPECT(files_equal(epath + "@Test/return_vector2.m" , apath + "@Test/return_vector2.m" )); + EXPECT(files_equal(epath + "@Test/Test.m" , apath + "@Test/Test.m" )); - EXPECT(files_equal(path + "/tests/expected/make_geometry.m", "actual/make_geometry.m")); - EXPECT(files_equal(path + "/tests/expected/Makefile" , "actual/Makefile" )); } /* ************************************************************************* */