84 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
| /* ----------------------------------------------------------------------------
 | |
| 
 | |
|  * GTSAM Copyright 2010, Georgia Tech Research Corporation, 
 | |
|  * Atlanta, Georgia 30332-0415
 | |
|  * All Rights Reserved
 | |
|  * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
 | |
| 
 | |
|  * See LICENSE for the license information
 | |
| 
 | |
|  * -------------------------------------------------------------------------- */
 | |
| 
 | |
| /**
 | |
|  * @file Deconstructor.ccp
 | |
|  * @author Frank Dellaert
 | |
|  * @author Andrew Melim
 | |
|  **/
 | |
| 
 | |
| #include <iostream>
 | |
| #include <fstream>
 | |
| 
 | |
| #include <boost/foreach.hpp>
 | |
| 
 | |
| #include "utilities.h"
 | |
| #include "Deconstructor.h"
 | |
| 
 | |
| using namespace std;
 | |
| using namespace wrap;
 | |
| 
 | |
| /* ************************************************************************* */
 | |
| string Deconstructor::matlab_wrapper_name(const string& className) const {
 | |
|   string str = "delete_" + className;
 | |
|   return str;
 | |
| }
 | |
| 
 | |
| /* ************************************************************************* */
 | |
| void Deconstructor::matlab_mfile(const string& toolboxPath, const string& qualifiedMatlabName) const {
 | |
| 
 | |
|   string matlabName = matlab_wrapper_name(qualifiedMatlabName);
 | |
| 
 | |
|   // open destination m-file
 | |
|   string wrapperFile = toolboxPath + "/" + matlabName + ".m";
 | |
|   FileWriter file(wrapperFile, verbose_, "%");
 | |
| 
 | |
|   // generate code
 | |
|   file.oss << "function result = " << matlabName << "(obj";
 | |
|   if (args.size()) file.oss << "," << args.names();
 | |
|   file.oss << ")" << endl;
 | |
|   file.oss << "  error('need to compile " << matlabName << ".cpp');" << endl;
 | |
|   file.oss << "end" << endl;
 | |
| 
 | |
|   // close file
 | |
|   file.emit(true);
 | |
| }
 | |
| 
 | |
| /* ************************************************************************* */
 | |
| void Deconstructor::matlab_wrapper(const string& toolboxPath,
 | |
| 				 const string& cppClassName,
 | |
| 				 const string& matlabClassName,
 | |
| 				 const vector<string>& using_namespaces, const vector<string>& includes) const {
 | |
|   string matlabName = matlab_wrapper_name(matlabClassName);
 | |
| 
 | |
|   // open destination wrapperFile
 | |
|   string wrapperFile = toolboxPath + "/" + matlabName + ".cpp";
 | |
|   FileWriter file(wrapperFile, verbose_, "//");
 | |
| 
 | |
|   // generate code
 | |
|   //
 | |
|   generateIncludes(file, name, includes);
 | |
|   cout << "Generate includes " << name << endl;
 | |
|   generateUsingNamespace(file, using_namespaces);
 | |
|     
 | |
|   file.oss << "void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[])" << endl;
 | |
|   file.oss << "{" << endl;
 | |
|   //Deconstructor takes 1 arg, the mxArray obj
 | |
|   file.oss << "  checkArguments(\"" << matlabName << "\",nargout,nargin," << "1" << ");" << endl;
 | |
|   file.oss << "  delete_shared_ptr< " << cppClassName << " >(in[0],\"" << matlabClassName << "\");" << endl;
 | |
|   file.oss << "}" << endl;
 | |
| 
 | |
|   // close file
 | |
|   file.emit(true);
 | |
| }
 | |
| 
 | |
| /* ************************************************************************* */
 |