Fixed handling of optional arguments under ArgumentParser. Fixed default constructor...
authorhbristow <hilton.bristow@gmail.com>
Fri, 30 Aug 2013 06:10:32 +0000 (16:10 +1000)
committerhbristow <hilton.bristow@gmail.com>
Fri, 30 Aug 2013 06:10:32 +0000 (16:10 +1000)
modules/matlab/generator/templates/functional.cpp
modules/matlab/generator/templates/template_function_base.cpp
modules/matlab/include/opencv2/matlab/bridge.hpp
modules/matlab/include/opencv2/matlab/mxarray.hpp

index d87e209..fff6f88 100644 (file)
@@ -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}}();
   {% endfor %}
   {% 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 %}
   {# ----------- Outputs ------------ #}
   {% for arg in fun.req|only|outputs %}
index 6b86e1e..ac5ae81 100644 (file)
@@ -35,7 +35,7 @@ void mexFunction(int nlhs, mxArray*{% if fun|noutputs %} plhs[]{% else %}*{% end
   ArgumentParser parser("{{fun.name}}");
   parser.{{ functional.composeVariant(fun) }};
   MxArrayVector sorted = parser.parse(MxArrayVector(prhs, prhs+nrhs));
-  {%endif %}
+  {% endif %}
 
   {% if fun|ninputs or fun|noutputs %}
   // setup
index a213665..2d697b2 100644 (file)
@@ -136,6 +136,11 @@ public:
   Bridge() {}
   virtual ~Bridge() {}
 
+  // --------------------------------------------------------------------------
+  //                         Bridge Properties
+  // --------------------------------------------------------------------------
+  bool empty() const { return ptr_.empty(); }
+
   /*! @brief unpack an object from Matlab into C++
    *
    * this function checks whether the given bridge is derived from an
index c048b03..d63b9a4 100644 (file)
@@ -244,9 +244,9 @@ public:
   /*!
    * @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
@@ -415,6 +415,7 @@ public:
   }
 
   size_t size() const { return mxGetNumberOfElements(ptr_); }
+  bool empty() const { return size() == 0; }
   size_t rows() const { return mxGetDimensions(ptr_)[0]; }
   size_t cols() const { return mxGetDimensions(ptr_)[1]; }
   size_t channels() const { return (mxGetNumberOfDimensions(ptr_) > 2) ? mxGetDimensions(ptr_)[2] : 1; }