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