Go to the documentation of this file.
   51 #define GTSAM_MAGIC_GAUSSIAN 
   54 #if defined(__LP64__) || defined(_WIN64) 
   56 #define mxUINT32OR64_CLASS mxUINT64_CLASS 
   58 #define mxUINT32OR64_CLASS mxUINT32_CLASS 
   79   mexErrMsgIdAndTxt(
"wrap:error", 
str);
 
   83   mwSize dims[1]; dims[0]=1;
 
   84   return mxCreateNumericArray(1, dims, classid, mxREAL);
 
   90     mexErrMsgIdAndTxt(
"wrap: not a scalar in ", 
str);
 
   97   virtual std::streamsize 
xsputn(
const char *
s, std::streamsize 
n) {
 
   98     mexPrintf(
"%.*s",
n,
s);
 
  103       mexPrintf(
"%.1s",&
c);
 
  115   err << 
name << 
" expects " << 
expected << 
" arguments, not " << nargin;
 
  117     error(err.str().c_str());
 
  125 template <
typename Class>
 
  127   error(
"wrap internal error: attempted wrap of invalid type");
 
  135   return mxCreateString(
value.c_str());
 
  181   return mxCreateDoubleScalar(
value);
 
  187   mxArray *
result = mxCreateDoubleMatrix(
m, 1, mxREAL);
 
  213   int m = 
A.rows(), 
n = 
A.cols();
 
  215   mexPrintf(
"wrap_Matrix called with A = \n", 
m,
n);
 
  218   mxArray *
result = mxCreateDoubleMatrix(
m, 
n, mxREAL);
 
  235 template <
typename T>
 
  238   mxArray* 
a = mxCreateDoubleMatrix(1, 1, mxREAL);
 
  239   double* 
data = mxGetPr(
a);
 
  240   data[0] = 
static_cast<double>(
x);
 
  244   mexCallMATLAB(1, &
result, 1, &
a, classname.c_str());
 
  255 template <
typename T>
 
  257   error(
"wrap internal error: attempted unwrap of invalid type");
 
  264 template <
typename T>
 
  267   mxArray* 
a = mxDuplicateArray(
array);
 
  271   mexCallMATLAB(1, &a_int32, 1, &
a, 
"int32");
 
  274   int32_T* 
value = (int32_T*)mxGetData(a_int32);
 
  276   return static_cast<T>(*value);
 
  285   if (
data==
NULL) 
error(
"unwrap<string>: not a character array");
 
  292 template <
typename T>
 
  294   switch (mxGetClassID(
array)) {
 
  301       return (
T) mxGetScalar(
array);
 
  309   return myGetScalar<bool>(
array);
 
  316   return myGetScalar<char>(
array);
 
  323   return myGetScalar<unsigned char>(
array);
 
  330   return myGetScalar<int>(
array);
 
  337   return myGetScalar<size_t>(
array);
 
  344   return myGetScalar<double>(
array);
 
  351   if (mxIsDouble(
array)==
false || 
n!=1) 
error(
"unwrap<vector>: not a vector");
 
  353   mexPrintf(
"unwrap< gtsam::Vector > called with %dx%d argument\n", 
m,
n);
 
  355   double* 
data = (
double*)mxGetData(
array);
 
  368   if (mxIsDouble(
array)==
false || 
n!=1) 
error(
"unwrap<vector>: not a vector");
 
  370   mexPrintf(
"unwrap< gtsam::Vector > called with %dx%d argument\n", 
m,
n);
 
  372   double* 
data = (
double*)mxGetData(
array);
 
  385   if (mxIsDouble(
array)==
false || 
n!=1) 
error(
"unwrap<vector>: not a vector");
 
  387   mexPrintf(
"unwrap< gtsam::Vector > called with %dx%d argument\n", 
m,
n);
 
  389   double* 
data = (
double*)mxGetData(
array);
 
  402   if (mxIsDouble(
array)==
false) 
error(
"unwrap<matrix>: not a matrix");
 
  405   mexPrintf(
"unwrap< gtsam::Matrix > called with %dx%d argument\n", 
m,
n);
 
  407   double* 
data = (
double*)mxGetData(
array);
 
  430 mxArray* 
create_object(
const std::string& classname, 
void *pointer, 
bool isVirtual, 
const char *rttiName) {
 
  435   input[0] = mxCreateNumericMatrix(1, 1, mxUINT64_CLASS, mxREAL);
 
  439   *
reinterpret_cast<void**
>(mxGetData(input[1])) = pointer;
 
  441   const char *derivedClassName;
 
  443     const mxArray *rttiRegistry = mexGetVariablePtr(
"global", 
"gtsamwrap_rttiRegistry");
 
  446       "gtsam wrap:  RTTI registry is missing - it could have been cleared from the workspace." 
  447       "  You can issue 'clear all' to completely clear the workspace, and next time a wrapped object is" 
  448       " created the RTTI registry will be recreated.");
 
  449     const mxArray *derivedNameMx = mxGetField(rttiRegistry, 0, rttiName);
 
  452       "gtsam wrap:  The derived class type " + 
string(rttiName) + 
" was not found in the RTTI registry.  " 
  453       "Try calling 'clear all' twice consecutively - we have seen things not get unloaded properly the " 
  454       "first time.  If this does not work, this may indicate an inconsistency in your wrap interface file.  " 
  455       "The most likely cause for this is that a base class was marked virtual in the wrap interface " 
  456       "definition header file for gtsam or for your module, but a derived type was returned by a C++ " 
  457       "function and that derived type was not marked virtual (or was not specified in the wrap interface " 
  458       "definition header at all).").
c_str());
 
  459     size_t strLen = mxGetN(derivedNameMx);
 
  460     char *buf = 
new char[strLen+1];
 
  461     if(mxGetString(derivedNameMx, buf, strLen+1))
 
  462       mexErrMsgTxt(
"gtsam wrap:  Internal error reading RTTI table, try 'clear all' to clear your workspace and reinitialize the toolbox.");
 
  463     derivedClassName = buf;
 
  464     input[2] = mxCreateString(
"void");
 
  467     derivedClassName = classname.c_str();
 
  470   mexCallMATLAB(1,&
result, nargin, input, derivedClassName);
 
  472   mxDestroyArray(input[0]);
 
  473   mxDestroyArray(input[1]);
 
  475     mxDestroyArray(input[2]);
 
  476     delete[] derivedClassName;
 
  486 template <
typename Class>
 
  487 mxArray* 
wrap_shared_ptr(std::shared_ptr< Class > shared_ptr, 
const std::string& matlabName, 
bool isVirtual) {
 
  491     std::shared_ptr<void> void_ptr(shared_ptr);
 
  494     std::shared_ptr<Class> *heapPtr = 
new std::shared_ptr<Class>(shared_ptr);
 
  500 template <
typename Class>
 
  503   mxArray* mxh = mxGetProperty(obj,0, propertyName.c_str());
 
  505     || mxGetM(mxh) != 1 || mxGetN(mxh) != 1) 
error(
 
  506     "Parameter is not an Shared type.");
 
  508   std::shared_ptr<Class>* spp = *
reinterpret_cast<std::shared_ptr<Class>**
> (mxGetData(mxh));
 
  512 template <
typename Class>
 
  513 Class* 
unwrap_ptr(
const mxArray* obj, 
const string& propertyName) {
 
  515   mxArray* mxh = mxGetProperty(obj,0, propertyName.c_str());
 
  516   Class* 
x = 
reinterpret_cast<Class*
> (mxGetData(mxh));
 
  
mxArray * wrap< string >(const string &value)
Annotation for function names.
Class * unwrap_ptr(const mxArray *obj, const string &propertyName)
mxArray * wrap_Vector(const gtsam::Vector &v)
mxArray * wrap< unsigned char >(const unsigned char &value)
std::shared_ptr< Class > unwrap_shared_ptr(const mxArray *obj, const string &propertyName)
typedef and functions to augment Eigen's VectorXd
unsigned char unwrap< unsigned char >(const mxArray *array)
mxArray * wrap< double >(const double &value)
virtual int overflow(int c=EOF)
typedef and functions to augment Eigen's MatrixXd
T unwrap_enum(const mxArray *array)
Unwrap from matlab array to C++ enum type.
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy x
mxArray * wrap(const Class &value)
void checkScalar(const mxArray *array, const char *str)
mxArray * wrap< bool >(const bool &value)
T myGetScalar(const mxArray *array)
T unwrap(const mxArray *array)
Eigen::Triplet< double > T
gtsam::Point2 unwrap< gtsam::Point2 >(const mxArray *array)
gtsam::Matrix unwrap< gtsam::Matrix >(const mxArray *array)
gtsam::Vector unwrap< gtsam::Vector >(const mxArray *array)
Matrix< SCALARA, Dynamic, Dynamic, opt_A > A
#define mxUINT32OR64_CLASS
mxArray * wrap< char >(const char &value)
void print(const Matrix &A, const string &s, ostream &stream)
void checkArguments(const string &name, int nargout, int nargin, int expected)
size_t unwrap< size_t >(const mxArray *array)
int unwrap< int >(const mxArray *array)
mxArray * scalar(mxClassID classid)
virtual std::streamsize xsputn(const char *s, std::streamsize n)
char unwrap< char >(const mxArray *array)
mxArray * wrap_shared_ptr(std::shared_ptr< Class > shared_ptr, const std::string &matlabName, bool isVirtual)
mxArray * wrap< size_t >(const size_t &value)
mxArray * wrap_enum(const T x, const std::string &classname)
Wrap the C++ enum to Matlab mxArray.
void error(const char *str)
static const std::uint64_t ptr_constructor_key
bool unwrap< bool >(const mxArray *array)
mxArray * wrap_Matrix(const gtsam::Matrix &A)
const char * c_str(Args &&...args)
Array< int, Dynamic, 1 > v
string unwrap< string >(const mxArray *array)
unsigned __int64 uint64_t
mxArray * create_object(const std::string &classname, void *pointer, bool isVirtual, const char *rttiName)
double unwrap< double >(const mxArray *array)
mxArray * wrap< int >(const int &value)
gtsam::Point3 unwrap< gtsam::Point3 >(const mxArray *array)
gtsam
Author(s): 
autogenerated on Wed May 28 2025 03:02:00