diff --git a/gtsam.h b/gtsam.h index 0068b0c3f..05a41afc3 100644 --- a/gtsam.h +++ b/gtsam.h @@ -771,11 +771,12 @@ class VariableIndex { // linear //************************************************************************* -#include namespace noiseModel { +#include virtual class Base { }; +#include virtual class Gaussian : gtsam::noiseModel::Base { static gtsam::noiseModel::Gaussian* SqrtInformation(Matrix R); static gtsam::noiseModel::Gaussian* Covariance(Matrix R); @@ -783,6 +784,7 @@ virtual class Gaussian : gtsam::noiseModel::Base { void print(string s) const; }; +#include virtual class Diagonal : gtsam::noiseModel::Gaussian { static gtsam::noiseModel::Diagonal* Sigmas(Vector sigmas); static gtsam::noiseModel::Diagonal* Variances(Vector variances); @@ -791,6 +793,7 @@ virtual class Diagonal : gtsam::noiseModel::Gaussian { void print(string s) const; }; +#include virtual class Isotropic : gtsam::noiseModel::Diagonal { static gtsam::noiseModel::Isotropic* Sigma(size_t dim, double sigma); static gtsam::noiseModel::Isotropic* Variance(size_t dim, double varianace); @@ -798,6 +801,7 @@ virtual class Isotropic : gtsam::noiseModel::Diagonal { void print(string s) const; }; +#include virtual class Unit : gtsam::noiseModel::Isotropic { static gtsam::noiseModel::Unit* Create(size_t dim); void print(string s) const; @@ -1216,9 +1220,9 @@ typedef gtsam::GenericProjectionFactor namespace pose2SLAM { +#include class Values { Values(); Values(const pose2SLAM::Values& values); @@ -1234,6 +1238,7 @@ class Values { Matrix poses() const; }; +#include class Graph { Graph(); Graph(const gtsam::NonlinearFactorGraph& graph); @@ -1270,9 +1275,9 @@ class Graph { // Pose3SLAM //************************************************************************* -#include namespace pose3SLAM { +#include class Values { Values(); Values(const pose3SLAM::Values& values); @@ -1288,6 +1293,7 @@ class Values { Matrix translations() const; }; +#include class Graph { Graph(); Graph(const gtsam::NonlinearFactorGraph& graph); @@ -1324,9 +1330,9 @@ class Graph { // planarSLAM //************************************************************************* -#include namespace planarSLAM { +#include class Values { Values(); Values(const planarSLAM::Values& values); @@ -1358,6 +1364,7 @@ class Values { Matrix points() const; }; +#include class Graph { Graph(); Graph(const gtsam::NonlinearFactorGraph& graph); @@ -1396,6 +1403,7 @@ class Graph { void addBearingRange(size_t poseKey, size_t pointKey, const gtsam::Rot2& bearing,double range, const gtsam::noiseModel::Base* noiseModel); }; +#include class Odometry { Odometry(size_t key1, size_t key2, const gtsam::Pose2& measured, const gtsam::noiseModel::Base* model); @@ -1410,9 +1418,9 @@ class Odometry { // VisualSLAM //************************************************************************* -#include namespace visualSLAM { +#include class Values { Values(); Values(const visualSLAM::Values& values); @@ -1446,6 +1454,7 @@ class Values { Matrix points() const; }; +#include class Graph { Graph(); Graph(const gtsam::NonlinearFactorGraph& graph); @@ -1494,6 +1503,7 @@ class Graph { }; +#include class ISAM { ISAM(); ISAM(int reorderInterval); @@ -1516,6 +1526,7 @@ class ISAM { gtsam::NonlinearFactorGraph getFactorsUnsafe() const; }; +#include class LevenbergMarquardtOptimizer { double lambda() const; void iterate(); @@ -1532,9 +1543,9 @@ class LevenbergMarquardtOptimizer { // sparse BA //************************************************************************ -#include namespace sparseBA { +#include class Values { Values(); Values(const sparseBA::Values& values); @@ -1561,6 +1572,7 @@ class Values { Matrix points() const; }; +#include class Graph { Graph(); Graph(const gtsam::NonlinearFactorGraph& graph); @@ -1596,6 +1608,7 @@ class Graph { void addSimpleCameraMeasurement(const gtsam::Point2 &z, gtsam::noiseModel::Base* model, size_t cameraKey, size_t pointKey); }; +#include class LevenbergMarquardtOptimizer { double lambda() const; void iterate(); diff --git a/gtsam_unstable/gtsam_unstable.h b/gtsam_unstable/gtsam_unstable.h index 3d9fd7aac..eebb53fbf 100644 --- a/gtsam_unstable/gtsam_unstable.h +++ b/gtsam_unstable/gtsam_unstable.h @@ -171,9 +171,9 @@ virtual class DGroundConstraint : gtsam::NonlinearFactor { }///\namespace gtsam -#include namespace imu { +#include class Values { Values(); void print(string s) const; @@ -182,6 +182,7 @@ class Values { gtsam::PoseRTV pose(size_t key) const; }; +#include class Graph { Graph(); void print(string s) const; diff --git a/wrap/Module.cpp b/wrap/Module.cpp index 32acb2853..e35794440 100644 --- a/wrap/Module.cpp +++ b/wrap/Module.cpp @@ -84,7 +84,6 @@ Module::Module(const string& interfacePath, Class cls0(enable_verbose),cls(enable_verbose); ForwardDeclaration fwDec0, fwDec; vector namespaces, /// current namespace tag - namespace_includes, /// current set of includes namespaces_return, /// namespace for current return type using_namespace_current; /// All namespaces from "using" declarations string templateArgument; @@ -256,10 +255,11 @@ Module::Module(const string& interfacePath, Rule include_p = str_p("#include") >> ch_p('<') >> (*(anychar_p - '>'))[assign_a(include_path)] >> ch_p('>'); Rule class_p = - (!*include_p + (str_p("")[assign_a(cls,cls0)]) + >> (*(include_p[push_back_a(cls.includes, include_path)][assign_a(include_path, null_str)]) >> !(templateInstantiations_p | templateList_p) >> !(str_p("virtual")[assign_a(cls.isVirtual, true)]) - >> str_p("class")[push_back_a(cls.includes, include_path)][assign_a(include_path, null_str)] + >> str_p("class") >> className_p[assign_a(cls.name)] >> ((':' >> classParent_p >> '{') | '{') >> *(functions_p | comments_p) @@ -268,7 +268,6 @@ Module::Module(const string& interfacePath, [assign_a(cls.constructor, constructor)] [assign_a(cls.namespaces, namespaces)] [assign_a(cls.using_namespaces, using_namespace_current)] - [append_a(cls.includes, namespace_includes)] [assign_a(deconstructor.name,cls.name)] [assign_a(cls.deconstructor, deconstructor)] [bl::bind(&handle_possible_template, bl::var(classes), bl::var(cls), bl::var(templateArgument), bl::var(templateInstantiations))] @@ -279,15 +278,14 @@ Module::Module(const string& interfacePath, [clear_a(templateInstantiations)]; Rule namespace_def_p = - (!*include_p - >> str_p("namespace")[push_back_a(namespace_includes, include_path)][assign_a(include_path, null_str)] + (*(include_p[push_back_a(includes, include_path)][assign_a(include_path, null_str)]) + >> str_p("namespace") >> namespace_name_p[push_back_a(namespaces)] >> ch_p('{') >> *(class_p | templateSingleInstantiation_p | namespace_def_p | comments_p) >> str_p("}///\\namespace") // end namespace, avoid confusion with classes >> !namespace_name_p) - [pop_a(namespaces)] - [pop_a(namespace_includes)]; + [pop_a(namespaces)]; Rule using_namespace_p = str_p("using") >> str_p("namespace") @@ -390,6 +388,12 @@ void Module::generateIncludes(FileWriter& file) const { all_includes.push_back(cls.name + ".h"); } + // Add namespace includes + BOOST_FOREACH(const string& s, includes) { + if(!s.empty()) + all_includes.push_back(s); + } + // sort and remove duplicates sort(all_includes.begin(), all_includes.end()); vector::const_iterator last_include = unique(all_includes.begin(), all_includes.end()); diff --git a/wrap/Module.h b/wrap/Module.h index 403f2f32d..c23b4e457 100644 --- a/wrap/Module.h +++ b/wrap/Module.h @@ -39,6 +39,7 @@ struct Module { bool verbose; ///< verbose flag // std::vector using_namespaces; ///< all default namespaces std::vector forward_declarations; + std::vector includes; ///< header include overrides /// constructor that parses interface file Module(const std::string& interfacePath,