Small change to wrap to avoid redundant includes in cpp file

release/4.3a0
Alex Cunningham 2012-07-11 14:54:13 +00:00
parent 2e6de9e9a1
commit f3406f3bc9
5 changed files with 36 additions and 28 deletions

View File

@ -315,6 +315,35 @@ void verifyReturnTypes(const vector<string>& validtypes, const map<string,T>& vt
} }
} }
/* ************************************************************************* */
void Module::generateIncludes(FileWriter& file) const {
// collect includes
vector<string> all_includes;
BOOST_FOREACH(const Class& cls, classes) {
// generateIncludes(wrapperFile, cls.name, cls.includes);
bool added_include = false;
BOOST_FOREACH(const string& s, cls.includes) {
if (!s.empty()) {
all_includes.push_back(s);
added_include = true;
}
}
if (!added_include) // add default include
all_includes.push_back(cls.name + ".h");
}
// sort and remove duplicates
sort(all_includes.begin(), all_includes.end());
unique(all_includes.begin(), all_includes.end());
// add includes to file
BOOST_FOREACH(const string& include, all_includes) {
file.oss << "#include <" << include << ">" << endl;
}
file.oss << "\n";
}
/* ************************************************************************* */ /* ************************************************************************* */
void Module::matlab_code(const string& toolboxPath, const string& headerPath) const { void Module::matlab_code(const string& toolboxPath, const string& headerPath) const {
@ -383,11 +412,8 @@ void Module::matlab_code(const string& toolboxPath, const string& headerPath) co
verifyReturnTypes<Method>(validTypes, cls.methods); verifyReturnTypes<Method>(validTypes, cls.methods);
} }
// Generate all includes // Generate includes while avoiding redundant includes
BOOST_FOREACH(const Class& cls, classes) { generateIncludes(wrapperFile);
generateIncludes(wrapperFile, cls.name, cls.includes);
}
wrapperFile.oss << "\n";
// Generate all collectors // Generate all collectors
BOOST_FOREACH(const Class& cls, classes) { BOOST_FOREACH(const Class& cls, classes) {

View File

@ -53,6 +53,8 @@ struct Module {
const std::string& headerPath) const; const std::string& headerPath) const;
void finish_wrapper(FileWriter& file, const std::vector<std::string>& functionNames) const; void finish_wrapper(FileWriter& file, const std::vector<std::string>& functionNames) const;
void generateIncludes(FileWriter& file) const;
}; };
} // \namespace wrap } // \namespace wrap

View File

@ -3,15 +3,15 @@
#include <map> #include <map>
#include <boost/foreach.hpp> #include <boost/foreach.hpp>
#include <path/to/ns1.h> #include <ClassD.h>
#include <path/to/ns1.h> #include <path/to/ns1.h>
#include <path/to/ns1/ClassB.h> #include <path/to/ns1/ClassB.h>
#include <path/to/ns2.h> #include <path/to/ns2.h>
#include <path/to/ns2/ClassA.h> #include <path/to/ns2/ClassA.h>
#include <path/to/ns2.h>
#include <path/to/ns3.h> #include <path/to/ns3.h>
#include <path/to/ns2.h> #include <path/to/ns2.h>
#include <ClassD.h> #include <path/to/ns2/ClassA.h>
#include <path/to/ns3.h>
typedef std::set<boost::shared_ptr<ns1::ClassA>*> Collector_ns1ClassA; typedef std::set<boost::shared_ptr<ns1::ClassA>*> Collector_ns1ClassA;
static Collector_ns1ClassA collector_ns1ClassA; static Collector_ns1ClassA collector_ns1ClassA;

View File

@ -120,20 +120,6 @@ void generateUsingNamespace(FileWriter& file, const vector<string>& using_namesp
file.oss << "using namespace " << s << ";" << endl; file.oss << "using namespace " << s << ";" << endl;
} }
/* ************************************************************************* */
void generateIncludes(FileWriter& file, const string& class_name,
const vector<string>& includes) {
bool added_include = false;
BOOST_FOREACH(const string& s, includes) {
if (!s.empty()) {
file.oss << "#include <" << s << ">" << endl;
added_include = true;
}
}
if (!added_include) // add default include
file.oss << "#include <" << class_name << ".h>" << endl;
}
/* ************************************************************************* */ /* ************************************************************************* */
string qualifiedName(const string& separator, const vector<string>& names, const string& finalName) { string qualifiedName(const string& separator, const vector<string>& names, const string& finalName) {
string result; string result;

View File

@ -117,12 +117,6 @@ std::string maybe_shared_ptr(bool add, const std::string& qtype, const std::stri
*/ */
void generateUsingNamespace(FileWriter& file, const std::vector<std::string>& using_namespaces); void generateUsingNamespace(FileWriter& file, const std::vector<std::string>& using_namespaces);
/**
* Creates the #include statements
*/
void generateIncludes(FileWriter& file, const std::string& class_name,
const std::vector<std::string>& includes);
/** /**
* Return a qualified name, if finalName is empty, only the names vector will * Return a qualified name, if finalName is empty, only the names vector will
* be used (i.e. there won't be a trailing separator on the qualified name). * be used (i.e. there won't be a trailing separator on the qualified name).