| 
									
										
										
										
											2011-10-14 02:41:56 +08:00
										 |  |  | /* ----------------------------------------------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * 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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * -------------------------------------------------------------------------- */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2011-10-14 11:23:14 +08:00
										 |  |  |  * @file utilities.ccp | 
					
						
							|  |  |  |  * @author Frank Dellaert | 
					
						
							| 
									
										
										
										
											2011-10-14 02:41:56 +08:00
										 |  |  |  **/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-10 04:29:47 +08:00
										 |  |  | #include <vector>
 | 
					
						
							| 
									
										
										
										
											2011-10-14 02:41:56 +08:00
										 |  |  | #include <exception>
 | 
					
						
							| 
									
										
										
										
											2011-12-10 04:29:47 +08:00
										 |  |  | #include <fstream>
 | 
					
						
							| 
									
										
										
										
											2011-10-14 02:41:56 +08:00
										 |  |  | #include <sstream>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-01-16 05:42:41 +08:00
										 |  |  | #include "FileWriter.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-03 00:43:15 +08:00
										 |  |  | namespace wrap { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-14 02:41:56 +08:00
										 |  |  | class CantOpenFile : public std::exception { | 
					
						
							|  |  |  |  private: | 
					
						
							|  |  |  |   std::string filename_; | 
					
						
							|  |  |  |  public: | 
					
						
							|  |  |  |  CantOpenFile(const std::string& filename) : filename_(filename) {} | 
					
						
							|  |  |  |   ~CantOpenFile() throw() {} | 
					
						
							|  |  |  |   virtual const char* what() const throw() {  | 
					
						
							|  |  |  |     return ("Can't open file " + filename_).c_str();  | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ParseFailed : public std::exception { | 
					
						
							|  |  |  |  private: | 
					
						
							|  |  |  |   int length_; | 
					
						
							|  |  |  |  public: | 
					
						
							|  |  |  |  ParseFailed(int length) : length_(length) {} | 
					
						
							|  |  |  |   ~ParseFailed() throw() {} | 
					
						
							|  |  |  |   virtual const char* what() const throw() {  | 
					
						
							|  |  |  |     std::stringstream buf; | 
					
						
							| 
									
										
										
										
											2011-12-02 02:57:32 +08:00
										 |  |  |     int len = length_+1; | 
					
						
							|  |  |  |     buf << "Parse failed at character [" << len << "]"; | 
					
						
							| 
									
										
										
										
											2011-10-14 02:41:56 +08:00
										 |  |  |     return buf.str().c_str();  | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-08 01:55:38 +08:00
										 |  |  | class DependencyMissing : public std::exception { | 
					
						
							| 
									
										
										
										
											2012-01-16 05:42:41 +08:00
										 |  |  | private: | 
					
						
							|  |  |  | 	std::string dependency_; | 
					
						
							|  |  |  | 	std::string location_; | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  | 	DependencyMissing(const std::string& dep, const std::string& loc) { | 
					
						
							|  |  |  | 		dependency_ = dep; | 
					
						
							|  |  |  | 		location_ = loc; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	~DependencyMissing() throw() {} | 
					
						
							|  |  |  | 	virtual const char* what() const throw() { | 
					
						
							|  |  |  | 		return ("Missing dependency " + dependency_ + " in " + location_).c_str(); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2011-12-08 01:55:38 +08:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-14 02:41:56 +08:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * read contents of a file into a std::string | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | std::string file_contents(const std::string& filename, bool skipheader=false); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * Check whether two files are equal | 
					
						
							|  |  |  |  * By default, skips the first line of actual so header is not generated | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2012-02-07 03:45:40 +08:00
										 |  |  | bool files_equal(const std::string& expected, const std::string& actual, bool skipheader=false); | 
					
						
							| 
									
										
										
										
											2011-10-14 02:41:56 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-02 02:57:32 +08:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * Compare strings for unit tests | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | bool assert_equal(const std::string& expected, const std::string& actual); | 
					
						
							| 
									
										
										
										
											2011-12-16 03:39:11 +08:00
										 |  |  | bool assert_equal(const std::vector<std::string>& expected, const std::vector<std::string>& actual); | 
					
						
							| 
									
										
										
										
											2011-12-02 10:32:18 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | // auxiliary function to wrap an argument into a shared_ptr template
 | 
					
						
							|  |  |  | std::string maybe_shared_ptr(bool add, const std::string& type); | 
					
						
							| 
									
										
										
										
											2011-12-03 00:43:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-10 04:29:47 +08:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * Creates the "using namespace [name];" declarations | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2012-01-16 05:42:41 +08:00
										 |  |  | void generateUsingNamespace(FileWriter& file, const std::vector<std::string>& using_namespaces); | 
					
						
							| 
									
										
										
										
											2011-12-10 04:29:47 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * Creates the #include statements | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2012-01-16 05:42:41 +08:00
										 |  |  | void generateIncludes(FileWriter& file, const std::string& class_name, | 
					
						
							| 
									
										
										
										
											2011-12-10 04:29:47 +08:00
										 |  |  | 		const std::vector<std::string>& includes); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-03 00:43:15 +08:00
										 |  |  | } // \namespace wrap
 |