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; | ||
|  |   } | ||
|  | } |