Added support for namespace includes to wrap
parent
ea1f1e8b65
commit
44aff08d56
15
gtsam.h
15
gtsam.h
|
@ -36,7 +36,10 @@
|
|||
* Static methods must start with a letter (upper or lowercase) and use the "static" keyword
|
||||
* Includes in C++ wrappers
|
||||
* - By default, the include will be <[classname].h>
|
||||
* - To override, add a full include statement inside the class definition
|
||||
* - All namespaces must have angle brackets: <path>
|
||||
* - To override, add a full include statement just before the class statement
|
||||
* - An override include can be added for a namespace by placing it just before the namespace statement
|
||||
* - Both classes and namespace accept exactly one namespace
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@ -288,9 +291,9 @@ class Ordering {
|
|||
};
|
||||
|
||||
// Planar SLAM example domain
|
||||
#include <gtsam/slam/planarSLAM.h>
|
||||
namespace planarSLAM {
|
||||
|
||||
#include <gtsam/slam/planarSLAM.h>
|
||||
class Values {
|
||||
Values();
|
||||
void print(string s) const;
|
||||
|
@ -300,7 +303,6 @@ class Values {
|
|||
void insertPoint(int key, const Point2& point);
|
||||
};
|
||||
|
||||
#include <gtsam/slam/planarSLAM.h>
|
||||
class Graph {
|
||||
Graph();
|
||||
|
||||
|
@ -321,7 +323,6 @@ class Graph {
|
|||
planarSLAM::Values optimize(const planarSLAM::Values& initialEstimate);
|
||||
};
|
||||
|
||||
#include <gtsam/slam/planarSLAM.h>
|
||||
class Odometry {
|
||||
Odometry(int key1, int key2, const Pose2& measured,
|
||||
const SharedNoiseModel& model);
|
||||
|
@ -332,9 +333,9 @@ class Odometry {
|
|||
}///\namespace planarSLAM
|
||||
|
||||
// Simulated2D Example Domain
|
||||
#include <gtsam/slam/simulated2D.h>
|
||||
namespace simulated2D {
|
||||
|
||||
#include <gtsam/slam/simulated2D.h>
|
||||
class Values {
|
||||
Values();
|
||||
void insertPose(int i, const Point2& p);
|
||||
|
@ -345,7 +346,6 @@ class Values {
|
|||
Point2 point(int j);
|
||||
};
|
||||
|
||||
#include <gtsam/slam/simulated2D.h>
|
||||
class Graph {
|
||||
Graph();
|
||||
};
|
||||
|
@ -355,9 +355,9 @@ class Graph {
|
|||
}///\namespace simulated2D
|
||||
|
||||
// Simulated2DOriented Example Domain
|
||||
#include <gtsam/slam/simulated2DOriented.h>
|
||||
namespace simulated2DOriented {
|
||||
|
||||
#include <gtsam/slam/simulated2DOriented.h>
|
||||
class Values {
|
||||
Values();
|
||||
void insertPose(int i, const Pose2& p);
|
||||
|
@ -368,7 +368,6 @@ class Values {
|
|||
Point2 point(int j);
|
||||
};
|
||||
|
||||
#include <gtsam/slam/simulated2DOriented.h>
|
||||
class Graph {
|
||||
Graph();
|
||||
};
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// automatically generated by wrap on 2011-Dec-08
|
||||
// automatically generated by wrap on 2011-Dec-15
|
||||
#include <wrap/matlab.h>
|
||||
#include <ClassA.h>
|
||||
#include <path/to/ns2.h>
|
||||
#include <path/to/ns2/ClassA.h>
|
||||
void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[])
|
||||
{
|
||||
checkArguments("memberFunction",nargout,nargin-1,0);
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
// automatically generated by wrap on 2011-Dec-15
|
||||
#include <wrap/matlab.h>
|
||||
#include <path/to/ns2.h>
|
||||
#include <path/to/ns2/ClassA.h>
|
||||
void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[])
|
||||
{
|
||||
checkArguments("nsArg",nargout,nargin-1,1);
|
||||
shared_ptr<ns2::ClassA> self = unwrap_shared_ptr< ns2::ClassA >(in[0],"ns2ClassA");
|
||||
ns1::ClassB& arg = *unwrap_shared_ptr< ns1::ClassB >(in[1], "ns1ClassB");
|
||||
int result = self->nsArg(arg);
|
||||
out[0] = wrap< int >(result);
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
function result = nsArg(obj,arg)
|
||||
% usage: obj.nsArg(arg)
|
||||
error('need to compile nsArg.cpp');
|
||||
end
|
|
@ -0,0 +1,12 @@
|
|||
// automatically generated by wrap on 2011-Dec-15
|
||||
#include <wrap/matlab.h>
|
||||
#include <path/to/ns2.h>
|
||||
#include <path/to/ns2/ClassA.h>
|
||||
void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[])
|
||||
{
|
||||
checkArguments("nsReturn",nargout,nargin-1,1);
|
||||
shared_ptr<ns2::ClassA> self = unwrap_shared_ptr< ns2::ClassA >(in[0],"ns2ClassA");
|
||||
double q = unwrap< double >(in[1]);
|
||||
ns2::ns3::ClassB result = self->nsReturn(q);
|
||||
out[0] = wrap_shared_ptr(make_shared< ns2::ns3::ClassB >(result),"ns2ns3ClassB");
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
function result = nsReturn(obj,q)
|
||||
% usage: obj.nsReturn(q)
|
||||
error('need to compile nsReturn.cpp');
|
||||
end
|
|
@ -1,4 +1,4 @@
|
|||
# automatically generated by wrap on 2011-Dec-08
|
||||
# automatically generated by wrap on 2011-Dec-15
|
||||
|
||||
MEX = mex
|
||||
MEXENDING = mexa64
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
% automatically generated by wrap on 2011-Dec-08
|
||||
% automatically generated by wrap on 2011-Dec-15
|
||||
echo on
|
||||
|
||||
toolboxpath = mfilename('fullpath');
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// automatically generated by wrap on 2011-Dec-08
|
||||
// automatically generated by wrap on 2011-Dec-15
|
||||
#include <wrap/matlab.h>
|
||||
#include <ClassD.h>
|
||||
void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[])
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
% automatically generated by wrap on 2011-Dec-08
|
||||
% automatically generated by wrap on 2011-Dec-15
|
||||
function result = new_ClassD_(obj)
|
||||
error('need to compile new_ClassD_.cpp');
|
||||
end
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// automatically generated by wrap on 2011-Dec-08
|
||||
// automatically generated by wrap on 2011-Dec-15
|
||||
#include <wrap/matlab.h>
|
||||
#include <ClassA.h>
|
||||
#include <path/to/ns1.h>
|
||||
void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[])
|
||||
{
|
||||
checkArguments("new_ns1ClassA_",nargout,nargin,0);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
% automatically generated by wrap on 2011-Dec-08
|
||||
% automatically generated by wrap on 2011-Dec-15
|
||||
function result = new_ns1ClassA_(obj)
|
||||
error('need to compile new_ns1ClassA_.cpp');
|
||||
end
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// automatically generated by wrap on 2011-Dec-08
|
||||
// automatically generated by wrap on 2011-Dec-15
|
||||
#include <wrap/matlab.h>
|
||||
#include <ClassB.h>
|
||||
#include <path/to/ns1.h>
|
||||
#include <path/to/ns1/ClassB.h>
|
||||
void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[])
|
||||
{
|
||||
checkArguments("new_ns1ClassB_",nargout,nargin,0);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
% automatically generated by wrap on 2011-Dec-08
|
||||
% automatically generated by wrap on 2011-Dec-15
|
||||
function result = new_ns1ClassB_(obj)
|
||||
error('need to compile new_ns1ClassB_.cpp');
|
||||
end
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// automatically generated by wrap on 2011-Dec-08
|
||||
// automatically generated by wrap on 2011-Dec-15
|
||||
#include <wrap/matlab.h>
|
||||
#include <ClassA.h>
|
||||
#include <path/to/ns2.h>
|
||||
#include <path/to/ns2/ClassA.h>
|
||||
void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[])
|
||||
{
|
||||
checkArguments("new_ns2ClassA_",nargout,nargin,0);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
% automatically generated by wrap on 2011-Dec-08
|
||||
% automatically generated by wrap on 2011-Dec-15
|
||||
function result = new_ns2ClassA_(obj)
|
||||
error('need to compile new_ns2ClassA_.cpp');
|
||||
end
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// automatically generated by wrap on 2011-Dec-08
|
||||
// automatically generated by wrap on 2011-Dec-15
|
||||
#include <wrap/matlab.h>
|
||||
#include <ClassC.h>
|
||||
#include <path/to/ns2.h>
|
||||
void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[])
|
||||
{
|
||||
checkArguments("new_ns2ClassC_",nargout,nargin,0);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
% automatically generated by wrap on 2011-Dec-08
|
||||
% automatically generated by wrap on 2011-Dec-15
|
||||
function result = new_ns2ClassC_(obj)
|
||||
error('need to compile new_ns2ClassC_.cpp');
|
||||
end
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// automatically generated by wrap on 2011-Dec-08
|
||||
// automatically generated by wrap on 2011-Dec-15
|
||||
#include <wrap/matlab.h>
|
||||
#include <ClassB.h>
|
||||
#include <path/to/ns2.h>
|
||||
#include <path/to/ns3.h>
|
||||
void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[])
|
||||
{
|
||||
checkArguments("new_ns2ns3ClassB_",nargout,nargin,0);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
% automatically generated by wrap on 2011-Dec-08
|
||||
% automatically generated by wrap on 2011-Dec-15
|
||||
function result = new_ns2ns3ClassB_(obj)
|
||||
error('need to compile new_ns2ns3ClassB_.cpp');
|
||||
end
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// automatically generated by wrap on 2011-Dec-08
|
||||
// automatically generated by wrap on 2011-Dec-15
|
||||
#include <wrap/matlab.h>
|
||||
#include <ClassA.h>
|
||||
#include <path/to/ns2.h>
|
||||
#include <path/to/ns2/ClassA.h>
|
||||
void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray *in[])
|
||||
{
|
||||
checkArguments("ns2ClassA_afunction",nargout,nargin,0);
|
||||
|
|
|
@ -210,6 +210,29 @@ TEST( wrap, matlab_code_namespaces ) {
|
|||
string act_path = "actual_namespaces/";
|
||||
module.matlab_code("actual_namespaces", "mexa64", "-O5");
|
||||
|
||||
EXPECT(files_equal(exp_path + "new_ClassD_.cpp" , act_path + "new_ClassD_.cpp" ));
|
||||
EXPECT(files_equal(exp_path + "new_ClassD_.m" , act_path + "new_ClassD_.m" ));
|
||||
EXPECT(files_equal(exp_path + "new_ns1ClassA_.cpp" , act_path + "new_ns1ClassA_.cpp" ));
|
||||
EXPECT(files_equal(exp_path + "new_ns1ClassA_.m" , act_path + "new_ns1ClassA_.m" ));
|
||||
EXPECT(files_equal(exp_path + "new_ns1ClassB_.cpp" , act_path + "new_ns1ClassB_.cpp" ));
|
||||
EXPECT(files_equal(exp_path + "new_ns1ClassB_.m" , act_path + "new_ns1ClassB_.m" ));
|
||||
EXPECT(files_equal(exp_path + "new_ns2ClassA_.cpp" , act_path + "new_ns2ClassA_.cpp" ));
|
||||
EXPECT(files_equal(exp_path + "new_ns2ClassA_.m" , act_path + "new_ns2ClassA_.m" ));
|
||||
EXPECT(files_equal(exp_path + "new_ns2ClassC_.cpp" , act_path + "new_ns2ClassC_.cpp" ));
|
||||
EXPECT(files_equal(exp_path + "new_ns2ClassC_.m" , act_path + "new_ns2ClassC_.m" ));
|
||||
EXPECT(files_equal(exp_path + "new_ns2ns3ClassB_.cpp" , act_path + "new_ns2ns3ClassB_.cpp" ));
|
||||
EXPECT(files_equal(exp_path + "new_ns2ns3ClassB_.m" , act_path + "new_ns2ns3ClassB_.m" ));
|
||||
EXPECT(files_equal(exp_path + "ns2ClassA_afunction.cpp" , act_path + "ns2ClassA_afunction.cpp" ));
|
||||
EXPECT(files_equal(exp_path + "ns2ClassA_afunction.m" , act_path + "ns2ClassA_afunction.m" ));
|
||||
|
||||
EXPECT(files_equal(exp_path + "@ns2ClassA/memberFunction.cpp", act_path + "@ns2ClassA/memberFunction.cpp"));
|
||||
EXPECT(files_equal(exp_path + "@ns2ClassA/memberFunction.m" , act_path + "@ns2ClassA/memberFunction.m" ));
|
||||
EXPECT(files_equal(exp_path + "@ns2ClassA/ns2ClassA.m" , act_path + "@ns2ClassA/ns2ClassA.m" ));
|
||||
EXPECT(files_equal(exp_path + "@ns2ClassA/nsArg.cpp" , act_path + "@ns2ClassA/nsArg.cpp" ));
|
||||
EXPECT(files_equal(exp_path + "@ns2ClassA/nsArg.m" , act_path + "@ns2ClassA/nsArg.m" ));
|
||||
EXPECT(files_equal(exp_path + "@ns2ClassA/nsReturn.cpp" , act_path + "@ns2ClassA/nsReturn.cpp" ));
|
||||
EXPECT(files_equal(exp_path + "@ns2ClassA/nsReturn.m" , act_path + "@ns2ClassA/nsReturn.m" ));
|
||||
|
||||
EXPECT(files_equal(exp_path + "make_testNamespaces.m", act_path + "make_testNamespaces.m"));
|
||||
EXPECT(files_equal(exp_path + "Makefile" , act_path + "Makefile" ));
|
||||
}
|
||||
|
|
|
@ -128,12 +128,15 @@ void generateUsingNamespace(ofstream& ofs, const vector<string>& using_namespace
|
|||
void generateIncludes(ofstream& ofs, const string& class_name,
|
||||
const vector<string>& includes) {
|
||||
ofs << "#include <wrap/matlab.h>" << endl;
|
||||
if (includes.empty()) // add a default include
|
||||
ofs << "#include <" << class_name << ".h>" << endl;
|
||||
else {
|
||||
BOOST_FOREACH(const string& s, includes)
|
||||
ofs << "#include <" << s << ">" << endl;
|
||||
bool added_include = false;
|
||||
BOOST_FOREACH(const string& s, includes) {
|
||||
if (!s.empty()) {
|
||||
ofs << "#include <" << s << ">" << endl;
|
||||
added_include = true;
|
||||
}
|
||||
}
|
||||
if (!added_include) // add default include
|
||||
ofs << "#include <" << class_name << ".h>" << endl;
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
|
|
Loading…
Reference in New Issue