75 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
		
		
			
		
	
	
			75 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * file: Argument.ccp
							 | 
						||
| 
								 | 
							
								 * Author: Frank Dellaert
							 | 
						||
| 
								 | 
							
								 **/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <iostream>
							 | 
						||
| 
								 | 
							
								#include <fstream>
							 | 
						||
| 
								 | 
							
								#include <sstream>
							 | 
						||
| 
								 | 
							
								#include <boost/foreach.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "Argument.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								using namespace std;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* ************************************************************************* */
							 | 
						||
| 
								 | 
							
								void Argument::matlab_unwrap(ofstream& ofs, 
							 | 
						||
| 
								 | 
							
											     const string& matlabName) 
							 | 
						||
| 
								 | 
							
								{ 
							 | 
						||
| 
								 | 
							
								  // the templated unwrap function returns a pointer
							 | 
						||
| 
								 | 
							
								  // example: double tol = unwrap< double >(in[2]);
							 | 
						||
| 
								 | 
							
								  ofs << "  ";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (is_ptr)      
							 | 
						||
| 
								 | 
							
								    ofs << "shared_ptr<" << type << "> " << name << " = unwrap_shared_ptr< ";
							 | 
						||
| 
								 | 
							
								  else if (is_ref) 
							 | 
						||
| 
								 | 
							
								    ofs <<                         type << "& " << name << " = *unwrap_shared_ptr< ";
							 | 
						||
| 
								 | 
							
								  else
							 | 
						||
| 
								 | 
							
								    ofs <<                         type << " "  << name << " = unwrap< ";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  ofs << type << " >(" << matlabName;
							 | 
						||
| 
								 | 
							
								  if (is_ptr || is_ref) ofs << ", \"" << type << "\"";
							 | 
						||
| 
								 | 
							
								  ofs << ");" << endl;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* ************************************************************************* */
							 | 
						||
| 
								 | 
							
								string ArgumentList::types() { 
							 | 
						||
| 
								 | 
							
								  string str;
							 | 
						||
| 
								 | 
							
								  bool first=true;
							 | 
						||
| 
								 | 
							
								  BOOST_FOREACH(Argument arg, *this)  {
							 | 
						||
| 
								 | 
							
								    if (!first) str += ","; str += arg.type; first=false;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  return str;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* ************************************************************************* */
							 | 
						||
| 
								 | 
							
								string ArgumentList::signature() { 
							 | 
						||
| 
								 | 
							
								  string str;
							 | 
						||
| 
								 | 
							
								  BOOST_FOREACH(Argument arg, *this)
							 | 
						||
| 
								 | 
							
								    str += arg.type[0];
							 | 
						||
| 
								 | 
							
								  return str;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* ************************************************************************* */
							 | 
						||
| 
								 | 
							
								string ArgumentList::names() { 
							 | 
						||
| 
								 | 
							
								  string str;
							 | 
						||
| 
								 | 
							
								  bool first=true;
							 | 
						||
| 
								 | 
							
								  BOOST_FOREACH(Argument arg, *this) {
							 | 
						||
| 
								 | 
							
								    if (!first) str += ","; str += arg.name; first=false;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  return str;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* ************************************************************************* */
							 | 
						||
| 
								 | 
							
								void ArgumentList::matlab_unwrap(ofstream& ofs, int start) { 
							 | 
						||
| 
								 | 
							
								  int index = start;
							 | 
						||
| 
								 | 
							
								  BOOST_FOREACH(Argument arg, *this) {
							 | 
						||
| 
								 | 
							
								    stringstream buf;
							 | 
						||
| 
								 | 
							
								    buf << "in[" << index << "]";
							 | 
						||
| 
								 | 
							
								    arg.matlab_unwrap(ofs,buf.str());
							 | 
						||
| 
								 | 
							
								    index++;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* ************************************************************************* */
							 |