handle Key by adding noninstantiating normal typedef rule. Fix copy constructor in template classes: using This.
parent
06ab94766c
commit
6044bffd8a
|
@ -139,10 +139,15 @@ void Constructor::emit_cython_pxd(FileWriter& pxdFile, Str className) const {
|
||||||
|
|
||||||
for (size_t i = 0; i < nrOverloads(); i++) {
|
for (size_t i = 0; i < nrOverloads(); i++) {
|
||||||
ArgumentList args = argumentList(i);
|
ArgumentList args = argumentList(i);
|
||||||
// ignore copy constructor, it's generated by default above
|
// ignore copy constructor, it's generated above by default
|
||||||
if (args.size() == 1 && args[0].is_const && args[0].is_ref &&
|
if (args.size() == 1 && args[0].is_const && args[0].is_ref &&
|
||||||
!args[0].is_ptr && args[0].type.cythonClass() == className)
|
!args[0].is_ptr) {
|
||||||
continue;
|
cout << args[0].type.cythonClass() << " vs " << className << endl;
|
||||||
|
if (args[0].type.cythonClass() == className ||
|
||||||
|
args[0].type.cythonClass() == "This")
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// generate the constructor
|
// generate the constructor
|
||||||
pxdFile.oss << "\t\t" << className << "(";
|
pxdFile.oss << "\t\t" << className << "(";
|
||||||
args.emit_cython_pxd(pxdFile, className);
|
args.emit_cython_pxd(pxdFile, className);
|
||||||
|
|
|
@ -64,6 +64,13 @@ static void handle_possible_template(vector<Class>& classes,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void push_typedef_pair(vector<TypedefPair>& typedefs,
|
||||||
|
const Qualified& oldType,
|
||||||
|
const Qualified& newType,
|
||||||
|
const string& includeFile) {
|
||||||
|
typedefs.push_back(TypedefPair(oldType, newType, includeFile));
|
||||||
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
Module::Module(const std::string& moduleName, bool enable_verbose)
|
Module::Module(const std::string& moduleName, bool enable_verbose)
|
||||||
: name(moduleName), verbose(enable_verbose)
|
: name(moduleName), verbose(enable_verbose)
|
||||||
|
@ -131,6 +138,16 @@ void Module::parseMarkup(const std::string& data) {
|
||||||
[push_back_a(templateInstantiationTypedefs, singleInstantiation)]
|
[push_back_a(templateInstantiationTypedefs, singleInstantiation)]
|
||||||
[assign_a(singleInstantiation, singleInstantiation0)];
|
[assign_a(singleInstantiation, singleInstantiation0)];
|
||||||
|
|
||||||
|
Qualified oldType, newType;
|
||||||
|
TypeGrammar typedefOldClass_g(oldType), typedefNewClass_g(newType);
|
||||||
|
Rule typedef_p =
|
||||||
|
(str_p("typedef") >> typedefOldClass_g >> typedefNewClass_g >>
|
||||||
|
';')
|
||||||
|
[assign_a(oldType.namespaces_, namespaces)]
|
||||||
|
[assign_a(newType.namespaces_, namespaces)]
|
||||||
|
[bl::bind(&push_typedef_pair, bl::var(typedefs), bl::var(oldType),
|
||||||
|
bl::var(newType), bl::var(currentInclude))];
|
||||||
|
|
||||||
// Create grammar for global functions
|
// Create grammar for global functions
|
||||||
GlobalFunctionGrammar global_function_g(global_functions,namespaces);
|
GlobalFunctionGrammar global_function_g(global_functions,namespaces);
|
||||||
|
|
||||||
|
@ -148,7 +165,7 @@ void Module::parseMarkup(const std::string& data) {
|
||||||
(str_p("namespace")
|
(str_p("namespace")
|
||||||
>> basic.namespace_p[push_back_a(namespaces)]
|
>> basic.namespace_p[push_back_a(namespaces)]
|
||||||
>> ch_p('{')
|
>> ch_p('{')
|
||||||
>> *(include_p | class_p | templateSingleInstantiation_p | global_function_g | namespace_def_p | basic.comments_p)
|
>> *(include_p | class_p | templateSingleInstantiation_p | typedef_p | global_function_g | namespace_def_p | basic.comments_p)
|
||||||
>> ch_p('}'))
|
>> ch_p('}'))
|
||||||
[pop_a(namespaces)];
|
[pop_a(namespaces)];
|
||||||
|
|
||||||
|
@ -323,11 +340,15 @@ void Module::emit_cython_pxd(FileWriter& pxdFile) const {
|
||||||
"\t\tT* get()\n"
|
"\t\tT* get()\n"
|
||||||
"\t\tT& operator*()\n\n";
|
"\t\tT& operator*()\n\n";
|
||||||
|
|
||||||
|
for(const TypedefPair& types: typedefs)
|
||||||
|
types.emit_cython_pxd(pxdFile);
|
||||||
|
|
||||||
//... wrap all classes
|
//... wrap all classes
|
||||||
for(const Class& cls: uninstantiatedClasses)
|
for(const Class& cls: uninstantiatedClasses)
|
||||||
cls.emit_cython_pxd(pxdFile, uninstantiatedClasses);
|
cls.emit_cython_pxd(pxdFile, uninstantiatedClasses);
|
||||||
|
|
||||||
//... ctypedef for template instantiations
|
//... ctypedef for template instantiations
|
||||||
// TODO: put them in the correct place!
|
// TODO: put them in the correct place!!!
|
||||||
for(const Class& cls: expandedClasses) {
|
for(const Class& cls: expandedClasses) {
|
||||||
if (cls.templateClass) {
|
if (cls.templateClass) {
|
||||||
pxdFile.oss << "ctypedef " << cls.templateClass->cythonClass() << "[";
|
pxdFile.oss << "ctypedef " << cls.templateClass->cythonClass() << "[";
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include "GlobalFunction.h"
|
#include "GlobalFunction.h"
|
||||||
#include "TemplateInstantiationTypedef.h"
|
#include "TemplateInstantiationTypedef.h"
|
||||||
#include "ForwardDeclaration.h"
|
#include "ForwardDeclaration.h"
|
||||||
|
#include "TypedefPair.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
@ -43,6 +44,7 @@ struct Module {
|
||||||
std::vector<ForwardDeclaration> forward_declarations;
|
std::vector<ForwardDeclaration> forward_declarations;
|
||||||
std::vector<std::string> includes; ///< Include statements
|
std::vector<std::string> includes; ///< Include statements
|
||||||
GlobalFunctions global_functions;
|
GlobalFunctions global_functions;
|
||||||
|
std::vector<TypedefPair> typedefs;
|
||||||
|
|
||||||
// After parsing:
|
// After parsing:
|
||||||
std::vector<Class> expandedClasses;
|
std::vector<Class> expandedClasses;
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Qualified.h"
|
||||||
|
|
||||||
|
namespace wrap {
|
||||||
|
struct TypedefPair {
|
||||||
|
Qualified oldType, newType;
|
||||||
|
std::string includeFile;
|
||||||
|
|
||||||
|
TypedefPair() {}
|
||||||
|
TypedefPair(const Qualified& oldType, const Qualified& newType,
|
||||||
|
const std::string& includeFile)
|
||||||
|
: oldType(oldType), newType(newType), includeFile(includeFile) {}
|
||||||
|
|
||||||
|
void emit_cython_pxd(FileWriter& file) const {
|
||||||
|
file.oss << "cdef extern from \"" << includeFile << "\" namespace \""
|
||||||
|
<< oldType.qualifiedNamespaces("::") << "\":\n";
|
||||||
|
file.oss << "\tctypedef " << oldType.cythonClass() << " "
|
||||||
|
<< newType.cythonClass() << "\n";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,16 +1,23 @@
|
||||||
namespace gtsam {
|
namespace gtsam {
|
||||||
|
|
||||||
|
#include <gtsam/inference/Key.h>
|
||||||
|
typedef size_t Key;
|
||||||
|
|
||||||
#include <gtsam/base/FastVector.h>
|
#include <gtsam/base/FastVector.h>
|
||||||
template<T> class FastVector{};
|
template<T> class FastVector {
|
||||||
typedef gtsam::FastVector<size_t> KeyVector;
|
FastVector();
|
||||||
|
FastVector(const This& f);
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef gtsam::FastVector<gtsam::Key> KeyVector;
|
||||||
|
|
||||||
#include <gtsam/base/FastList.h>
|
#include <gtsam/base/FastList.h>
|
||||||
template<T> class FastList{};
|
template<T> class FastList{};
|
||||||
typedef gtsam::FastList<size_t> KeyList;
|
typedef gtsam::FastList<gtsam::Key> KeyList;
|
||||||
|
|
||||||
#include <gtsam/base/FastSet.h>
|
#include <gtsam/base/FastSet.h>
|
||||||
template<T> class FastSet{};
|
template<T> class FastSet{};
|
||||||
typedef gtsam::FastSet<size_t> KeySet;
|
typedef gtsam::FastSet<gtsam::Key> KeySet;
|
||||||
|
|
||||||
#include <gtsam/base/FastMap.h>
|
#include <gtsam/base/FastMap.h>
|
||||||
template<K,V> class FastMap{};
|
template<K,V> class FastMap{};
|
||||||
|
@ -687,6 +694,7 @@ template<CALIBRATION>
|
||||||
class PinholeCamera {
|
class PinholeCamera {
|
||||||
// Standard Constructors and Named Constructors
|
// Standard Constructors and Named Constructors
|
||||||
PinholeCamera();
|
PinholeCamera();
|
||||||
|
PinholeCamera(const This& cam);
|
||||||
PinholeCamera(const gtsam::Pose3& pose);
|
PinholeCamera(const gtsam::Pose3& pose);
|
||||||
PinholeCamera(const gtsam::Pose3& pose, const CALIBRATION& K);
|
PinholeCamera(const gtsam::Pose3& pose, const CALIBRATION& K);
|
||||||
static This Level(const CALIBRATION& K, const gtsam::Pose2& pose, double height);
|
static This Level(const CALIBRATION& K, const gtsam::Pose2& pose, double height);
|
||||||
|
@ -843,13 +851,13 @@ virtual class SymbolicFactor {
|
||||||
SymbolicFactor(size_t j1, size_t j2, size_t j3, size_t j4);
|
SymbolicFactor(size_t j1, size_t j2, size_t j3, size_t j4);
|
||||||
SymbolicFactor(size_t j1, size_t j2, size_t j3, size_t j4, size_t j5);
|
SymbolicFactor(size_t j1, size_t j2, size_t j3, size_t j4, size_t j5);
|
||||||
SymbolicFactor(size_t j1, size_t j2, size_t j3, size_t j4, size_t j5, size_t j6);
|
SymbolicFactor(size_t j1, size_t j2, size_t j3, size_t j4, size_t j5, size_t j6);
|
||||||
// static gtsam::SymbolicFactor FromKeys(const gtsam::KeyVector& js);
|
static gtsam::SymbolicFactor FromKeys(const gtsam::KeyVector& js);
|
||||||
|
|
||||||
// From Factor
|
// From Factor
|
||||||
size_t size() const;
|
size_t size() const;
|
||||||
void print(string s) const;
|
void print(string s) const;
|
||||||
bool equals(const gtsam::SymbolicFactor& other, double tol) const;
|
bool equals(const gtsam::SymbolicFactor& other, double tol) const;
|
||||||
// gtsam::KeyVector keys();
|
gtsam::KeyVector keys();
|
||||||
};
|
};
|
||||||
|
|
||||||
#include <gtsam/symbolic/SymbolicFactorGraph.h>
|
#include <gtsam/symbolic/SymbolicFactorGraph.h>
|
||||||
|
@ -884,19 +892,19 @@ virtual class SymbolicFactorGraph {
|
||||||
gtsam::SymbolicBayesTree* eliminateMultifrontal(const gtsam::Ordering& ordering);
|
gtsam::SymbolicBayesTree* eliminateMultifrontal(const gtsam::Ordering& ordering);
|
||||||
pair<gtsam::SymbolicBayesNet*, gtsam::SymbolicFactorGraph*> eliminatePartialSequential(
|
pair<gtsam::SymbolicBayesNet*, gtsam::SymbolicFactorGraph*> eliminatePartialSequential(
|
||||||
const gtsam::Ordering& ordering);
|
const gtsam::Ordering& ordering);
|
||||||
// pair<gtsam::SymbolicBayesNet*, gtsam::SymbolicFactorGraph*> eliminatePartialSequential(
|
pair<gtsam::SymbolicBayesNet*, gtsam::SymbolicFactorGraph*> eliminatePartialSequential(
|
||||||
// const gtsam::KeyVector& keys);
|
const gtsam::KeyVector& keys);
|
||||||
pair<gtsam::SymbolicBayesTree*, gtsam::SymbolicFactorGraph*> eliminatePartialMultifrontal(
|
pair<gtsam::SymbolicBayesTree*, gtsam::SymbolicFactorGraph*> eliminatePartialMultifrontal(
|
||||||
const gtsam::Ordering& ordering);
|
const gtsam::Ordering& ordering);
|
||||||
// pair<gtsam::SymbolicBayesTree*, gtsam::SymbolicFactorGraph*> eliminatePartialMultifrontal(
|
pair<gtsam::SymbolicBayesTree*, gtsam::SymbolicFactorGraph*> eliminatePartialMultifrontal(
|
||||||
// const gtsam::KeyVector& keys);
|
const gtsam::KeyVector& keys);
|
||||||
gtsam::SymbolicBayesNet* marginalMultifrontalBayesNet(const gtsam::Ordering& variables);
|
gtsam::SymbolicBayesNet* marginalMultifrontalBayesNet(const gtsam::Ordering& variables);
|
||||||
// gtsam::SymbolicBayesNet* marginalMultifrontalBayesNet(const gtsam::KeyVector& variables);
|
gtsam::SymbolicBayesNet* marginalMultifrontalBayesNet(const gtsam::KeyVector& variables);
|
||||||
gtsam::SymbolicBayesNet* marginalMultifrontalBayesNet(const gtsam::Ordering& variables,
|
gtsam::SymbolicBayesNet* marginalMultifrontalBayesNet(const gtsam::Ordering& variables,
|
||||||
const gtsam::Ordering& marginalizedVariableOrdering);
|
const gtsam::Ordering& marginalizedVariableOrdering);
|
||||||
// gtsam::SymbolicBayesNet* marginalMultifrontalBayesNet(const gtsam::KeyVector& variables,
|
gtsam::SymbolicBayesNet* marginalMultifrontalBayesNet(const gtsam::KeyVector& variables,
|
||||||
// const gtsam::Ordering& marginalizedVariableOrdering);
|
const gtsam::Ordering& marginalizedVariableOrdering);
|
||||||
// gtsam::SymbolicFactorGraph* marginal(const gtsam::KeyVector& variables);
|
gtsam::SymbolicFactorGraph* marginal(const gtsam::KeyVector& variables);
|
||||||
};
|
};
|
||||||
|
|
||||||
#include <gtsam/symbolic/SymbolicConditional.h>
|
#include <gtsam/symbolic/SymbolicConditional.h>
|
||||||
|
@ -908,7 +916,7 @@ virtual class SymbolicConditional : gtsam::SymbolicFactor {
|
||||||
SymbolicConditional(size_t key, size_t parent);
|
SymbolicConditional(size_t key, size_t parent);
|
||||||
SymbolicConditional(size_t key, size_t parent1, size_t parent2);
|
SymbolicConditional(size_t key, size_t parent1, size_t parent2);
|
||||||
SymbolicConditional(size_t key, size_t parent1, size_t parent2, size_t parent3);
|
SymbolicConditional(size_t key, size_t parent1, size_t parent2, size_t parent3);
|
||||||
// static gtsam::SymbolicConditional FromKeys(const gtsam::KeyVector& keys, size_t nrFrontals);
|
static gtsam::SymbolicConditional FromKeys(const gtsam::KeyVector& keys, size_t nrFrontals);
|
||||||
|
|
||||||
// Testable
|
// Testable
|
||||||
void print(string s) const;
|
void print(string s) const;
|
||||||
|
|
Loading…
Reference in New Issue