// automatically generated by wrap #include #include typedef boost::shared_ptr Shared; static std::set collector; void cleanup(void) { BOOST_FOREACH(Shared* p, collector) collector.erase(p); } 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) self = new Shared(new ns1::ClassA()); collector.insert(self); out[0] = mxCreateNumericMatrix(1, 1, mxUINT32OR64_CLASS, mxREAL); *reinterpret_cast (mxGetPr(out[0])) = self; } }