35 lines
		
	
	
		
			815 B
		
	
	
	
		
			C++
		
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			815 B
		
	
	
	
		
			C++
		
	
	
| // automatically generated by wrap
 | |
| #include <wrap/matlab.h>
 | |
| #include <ClassD.h>
 | |
| typedef boost::shared_ptr<ClassD> Shared;
 | |
| 
 | |
| static std::set<Shared*> 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<int>(in[1]);
 | |
| 
 | |
|     if(nc == 0)
 | |
|       self = new Shared(new ClassD());
 | |
|     collector.insert(self);
 | |
|     out[0] = mxCreateNumericMatrix(1, 1, mxUINT32OR64_CLASS, mxREAL);
 | |
|     *reinterpret_cast<Shared**> (mxGetPr(out[0])) = self;
 | |
|   }
 | |
| }
 |