Commit d16d637e authored by hbristow's avatar hbristow

Fixed handling of optional arguments under ArgumentParser. Fixed default…

Fixed handling of optional arguments under ArgumentParser. Fixed default constructor error in MxArray
parent 25ee1f90
...@@ -110,7 +110,7 @@ addVariant("{{ fun.name }}", {{ fun.req|inputs|length }}, {{ fun.opt|inputs|leng ...@@ -110,7 +110,7 @@ addVariant("{{ fun.name }}", {{ fun.req|inputs|length }}, {{ fun.opt|inputs|leng
{{arg.tp}} {{arg.name}} = inputs[{{ loop.index0 }}].to{{arg.tp|toUpperCamelCase}}(); {{arg.tp}} {{arg.name}} = inputs[{{ loop.index0 }}].to{{arg.tp|toUpperCamelCase}}();
{% endfor %} {% endfor %}
{% for opt in fun.opt|inputs %} {% for opt in fun.opt|inputs %}
{{opt.tp}} {{opt.name}} = (nrhs > {{loop.index0 + fun.req|inputs|length}}) ? inputs[{{loop.index0 + fun.req|inputs|length}}].to{{opt.tp|toUpperCamelCase}}() : {% if opt.ref == '*' -%} {{opt.tp}}() {%- else -%} {{opt.default}} {%- endif %}; {{opt.tp}} {{opt.name}} = inputs[{{loop.index0 + fun.req|inputs|length}}].empty() ? {% if opt.ref == '*' -%} {{opt.tp}}() {%- else -%} {{opt.default}} {%- endif %} : inputs[{{loop.index0 + fun.req|inputs|length}}].to{{opt.tp|toUpperCamelCase}}();
{% endfor %} {% endfor %}
{# ----------- Outputs ------------ #} {# ----------- Outputs ------------ #}
{% for arg in fun.req|only|outputs %} {% for arg in fun.req|only|outputs %}
......
...@@ -35,7 +35,7 @@ void mexFunction(int nlhs, mxArray*{% if fun|noutputs %} plhs[]{% else %}*{% end ...@@ -35,7 +35,7 @@ void mexFunction(int nlhs, mxArray*{% if fun|noutputs %} plhs[]{% else %}*{% end
ArgumentParser parser("{{fun.name}}"); ArgumentParser parser("{{fun.name}}");
parser.{{ functional.composeVariant(fun) }}; parser.{{ functional.composeVariant(fun) }};
MxArrayVector sorted = parser.parse(MxArrayVector(prhs, prhs+nrhs)); MxArrayVector sorted = parser.parse(MxArrayVector(prhs, prhs+nrhs));
{%endif %} {% endif %}
{% if fun|ninputs or fun|noutputs %} {% if fun|ninputs or fun|noutputs %}
// setup // setup
......
...@@ -136,6 +136,11 @@ public: ...@@ -136,6 +136,11 @@ public:
Bridge() {} Bridge() {}
virtual ~Bridge() {} virtual ~Bridge() {}
// --------------------------------------------------------------------------
// Bridge Properties
// --------------------------------------------------------------------------
bool empty() const { return ptr_.empty(); }
/*! @brief unpack an object from Matlab into C++ /*! @brief unpack an object from Matlab into C++
* *
* this function checks whether the given bridge is derived from an * this function checks whether the given bridge is derived from an
......
...@@ -244,9 +244,9 @@ public: ...@@ -244,9 +244,9 @@ public:
/*! /*!
* @brief default constructor * @brief default constructor
* *
* Construct a valid 0x0 matrix (so all other methods do not need validity checks * Construct a valid 0x0 matrix (so all other methods do not need validity checks)
*/ */
MxArray() : ptr_(mxCreateDoubleMatrix(1, 1, matlab::Traits<>::Real)), owns_(true) {} MxArray() : ptr_(mxCreateDoubleMatrix(0, 0, matlab::Traits<>::Real)), owns_(true) {}
/*! /*!
* @brief inheriting constructor * @brief inheriting constructor
...@@ -415,6 +415,7 @@ public: ...@@ -415,6 +415,7 @@ public:
} }
size_t size() const { return mxGetNumberOfElements(ptr_); } size_t size() const { return mxGetNumberOfElements(ptr_); }
bool empty() const { return size() == 0; }
size_t rows() const { return mxGetDimensions(ptr_)[0]; } size_t rows() const { return mxGetDimensions(ptr_)[0]; }
size_t cols() const { return mxGetDimensions(ptr_)[1]; } size_t cols() const { return mxGetDimensions(ptr_)[1]; }
size_t channels() const { return (mxGetNumberOfDimensions(ptr_) > 2) ? mxGetDimensions(ptr_)[2] : 1; } size_t channels() const { return (mxGetNumberOfDimensions(ptr_) > 2) ? mxGetDimensions(ptr_)[2] : 1; }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment