From f3406f3bc9aa5c421cbb4aba29979238b30a99a2 Mon Sep 17 00:00:00 2001 From: Alex Cunningham Date: Wed, 11 Jul 2012 14:54:13 +0000 Subject: [PATCH] Small change to wrap to avoid redundant includes in cpp file --- wrap/Module.cpp | 36 ++++++++++++++++--- wrap/Module.h | 2 ++ .../testNamespaces_wrapper.cpp | 6 ++-- wrap/utilities.cpp | 14 -------- wrap/utilities.h | 6 ---- 5 files changed, 36 insertions(+), 28 deletions(-) diff --git a/wrap/Module.cpp b/wrap/Module.cpp index 413fc84b8..f672770a4 100644 --- a/wrap/Module.cpp +++ b/wrap/Module.cpp @@ -315,6 +315,35 @@ void verifyReturnTypes(const vector& validtypes, const map& vt } } +/* ************************************************************************* */ +void Module::generateIncludes(FileWriter& file) const { + + // collect includes + vector 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 { @@ -383,11 +412,8 @@ void Module::matlab_code(const string& toolboxPath, const string& headerPath) co verifyReturnTypes(validTypes, cls.methods); } - // Generate all includes - BOOST_FOREACH(const Class& cls, classes) { - generateIncludes(wrapperFile, cls.name, cls.includes); - } - wrapperFile.oss << "\n"; + // Generate includes while avoiding redundant includes + generateIncludes(wrapperFile); // Generate all collectors BOOST_FOREACH(const Class& cls, classes) { diff --git a/wrap/Module.h b/wrap/Module.h index 3cb23be25..786379d16 100644 --- a/wrap/Module.h +++ b/wrap/Module.h @@ -53,6 +53,8 @@ struct Module { const std::string& headerPath) const; void finish_wrapper(FileWriter& file, const std::vector& functionNames) const; + + void generateIncludes(FileWriter& file) const; }; } // \namespace wrap diff --git a/wrap/tests/expected_namespaces/testNamespaces_wrapper.cpp b/wrap/tests/expected_namespaces/testNamespaces_wrapper.cpp index 2e0a6431e..53f28d10e 100644 --- a/wrap/tests/expected_namespaces/testNamespaces_wrapper.cpp +++ b/wrap/tests/expected_namespaces/testNamespaces_wrapper.cpp @@ -3,15 +3,15 @@ #include #include -#include +#include #include #include #include #include -#include #include #include -#include +#include +#include typedef std::set*> Collector_ns1ClassA; static Collector_ns1ClassA collector_ns1ClassA; diff --git a/wrap/utilities.cpp b/wrap/utilities.cpp index 94117b5d3..5f0db4248 100644 --- a/wrap/utilities.cpp +++ b/wrap/utilities.cpp @@ -120,20 +120,6 @@ void generateUsingNamespace(FileWriter& file, const vector& using_namesp file.oss << "using namespace " << s << ";" << endl; } -/* ************************************************************************* */ -void generateIncludes(FileWriter& file, const string& class_name, - const vector& 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& names, const string& finalName) { string result; diff --git a/wrap/utilities.h b/wrap/utilities.h index 99e19a755..eaf339928 100644 --- a/wrap/utilities.h +++ b/wrap/utilities.h @@ -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& using_namespaces); -/** - * Creates the #include statements - */ -void generateIncludes(FileWriter& file, const std::string& class_name, - const std::vector& includes); - /** * 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).