emit template class to Cython pxd with test
Cython allows template class.release/4.3a0
parent
40da298f68
commit
b9880d4257
|
@ -45,8 +45,10 @@ namespace fs = boost::filesystem;
|
|||
/* ************************************************************************* */
|
||||
// If a number of template arguments were given, generate a number of expanded
|
||||
// class names, e.g., PriorFactor -> PriorFactorPose2, and add those classes
|
||||
static void handle_possible_template(vector<Class>& classes, const Class& cls,
|
||||
const Template& t) {
|
||||
static void handle_possible_template(vector<Class>& classes,
|
||||
vector<Class>& uninstantiatedClasses,
|
||||
const Class& cls, const Template& t) {
|
||||
uninstantiatedClasses.push_back(cls);
|
||||
if (cls.templateArgs.empty() || t.empty()) {
|
||||
classes.push_back(cls);
|
||||
} else {
|
||||
|
@ -106,13 +108,13 @@ void Module::parseMarkup(const std::string& data) {
|
|||
Class cls0(verbose),cls(verbose);
|
||||
Template classTemplate;
|
||||
ClassGrammar class_g(cls,classTemplate);
|
||||
Rule class_p = class_g //
|
||||
Rule class_p = class_g //
|
||||
[assign_a(cls.namespaces_, namespaces)]
|
||||
[assign_a(cls.includeFile, currentInclude)]
|
||||
[bl::bind(&handle_possible_template, bl::var(classes), bl::var(cls),
|
||||
bl::var(classTemplate))]
|
||||
[clear_a(classTemplate)] //
|
||||
[assign_a(cls,cls0)];
|
||||
[assign_a(cls.includeFile, currentInclude)][bl::bind(
|
||||
&handle_possible_template, bl::var(classes),
|
||||
bl::var(uninstantiatedClasses), bl::var(cls),
|
||||
bl::var(classTemplate))][clear_a(classTemplate)] //
|
||||
[assign_a(cls, cls0)];
|
||||
|
||||
// parse "gtsam::Pose2" and add to singleInstantiation.typeList
|
||||
TemplateInstantiationTypedef singleInstantiation, singleInstantiation0;
|
||||
|
@ -184,6 +186,9 @@ void Module::parseMarkup(const std::string& data) {
|
|||
for(Class& cls: classes)
|
||||
cls.erase_serialization();
|
||||
|
||||
for(Class& cls: uninstantiatedClasses)
|
||||
cls.erase_serialization();
|
||||
|
||||
// Explicitly add methods to the classes from parents so it shows in documentation
|
||||
for(Class& cls: classes)
|
||||
cls.appendInheritedMethods(cls, classes);
|
||||
|
@ -290,7 +295,7 @@ void Module::cython_code(const string& toolboxPath) const {
|
|||
FileWriter pyxFile(pyxFileName, verbose, "#");
|
||||
|
||||
// create proxy class and wrapper code
|
||||
for(const Class& cls: expandedClasses)
|
||||
for(const Class& cls: uninstantiatedClasses)
|
||||
cls.cython_wrapper(pxdFile, pyxFile);
|
||||
|
||||
// finish wrapper file
|
||||
|
@ -483,8 +488,10 @@ void Module::python_wrapper(const string& toolboxPath) const {
|
|||
wrapperFile.oss << "{\n";
|
||||
|
||||
// write out classes
|
||||
for(const Class& cls: expandedClasses)
|
||||
for(const Class& cls: classes) {
|
||||
cout << "tmpl args:" << cls.templateArgs.size() << endl;
|
||||
cls.python_wrapper(wrapperFile);
|
||||
}
|
||||
|
||||
// write out global functions
|
||||
for(const GlobalFunctions::value_type& p: global_functions)
|
||||
|
|
|
@ -38,6 +38,7 @@ struct Module {
|
|||
std::string name; ///< module name
|
||||
bool verbose; ///< verbose flag
|
||||
std::vector<Class> classes; ///< list of classes
|
||||
std::vector<Class> uninstantiatedClasses; ///< list of template classes after instantiated
|
||||
std::vector<TemplateInstantiationTypedef> templateInstantiationTypedefs; ///< list of template instantiations
|
||||
std::vector<ForwardDeclaration> forward_declarations;
|
||||
std::vector<std::string> includes; ///< Include statements
|
||||
|
|
|
@ -320,6 +320,16 @@ virtual class BetweenFactor : gtsam::NoiseModelFactor {
|
|||
void serialize() const;
|
||||
};
|
||||
|
||||
#include <gtsam/sam/BearingFactor.h>
|
||||
template<POSE, POINT, BEARING>
|
||||
virtual class BearingFactor : gtsam::NoiseModelFactor {
|
||||
BearingFactor(size_t key1, size_t key2, const BEARING& measured, const gtsam::noiseModel::Base* noiseModel);
|
||||
|
||||
// enabling serialization functionality
|
||||
void serialize() const;
|
||||
};
|
||||
|
||||
typedef gtsam::BearingFactor<gtsam::Pose2, gtsam::Point2, gtsam::Rot2> BearingFactor2D;
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue