mirror of https://github.com/opencv/opencv.git
parent
c29a98ef84
commit
09e294711d
4 changed files with 124 additions and 1 deletions
@ -0,0 +1,85 @@ |
|||||||
|
/*
|
||||||
|
* file: {{class.name}}Bridge.cpp |
||||||
|
* author: A trusty code generator |
||||||
|
* date: {{time.strftime("%a, %d %b %Y %H:%M:%S", time.gmtime())}} |
||||||
|
*
|
||||||
|
* This file was autogenerated, do not modify. |
||||||
|
* See LICENCE for full modification and redistribution details. |
||||||
|
* Copyright {{time.strftime("%Y", time.gmtime())}} The OpenCV Foundation |
||||||
|
*/ |
||||||
|
#include "mex.h" |
||||||
|
#include "bridge.hpp" |
||||||
|
#include <vector> |
||||||
|
#include <unordered_map> |
||||||
|
#include <string> |
||||||
|
{% block includes %} |
||||||
|
{% endblock %} |
||||||
|
|
||||||
|
namespace { |
||||||
|
|
||||||
|
typedef std::unordered_map Map; |
||||||
|
typedef std::vector<Bridge> (*)({{class.name}}&, const std::vector<Bridge>&) MethodSignature; |
||||||
|
|
||||||
|
{% for function in class.functions %} |
||||||
|
// wrapper for {{function.name}}() method
|
||||||
|
std::vector<Bridge> {{function.name}}({{class.name}}& inst, const std::vector<Bridge>& args) { |
||||||
|
// setup
|
||||||
|
|
||||||
|
// invoke
|
||||||
|
|
||||||
|
|
||||||
|
// setdown
|
||||||
|
} |
||||||
|
{% endfor %} |
||||||
|
|
||||||
|
map<std::string, MethodSignature> createMethodMap() { |
||||||
|
Map<std::string, MethodSignature> m; |
||||||
|
{% for function in class.functions %} |
||||||
|
m["{{function.name}}"] = &{{function.name}}; |
||||||
|
{% endfor %} |
||||||
|
return m; |
||||||
|
} |
||||||
|
static const Map<std::string, MethodSignature> methods = createMethodMap(); |
||||||
|
|
||||||
|
// map of created {{class.name}} instances. Don't trust the user to keep them safe...
|
||||||
|
static Map<void *, {{class.name}}> instances; |
||||||
|
|
||||||
|
/*
|
||||||
|
* {{ class.name }} |
||||||
|
* Gateway routine |
||||||
|
* nlhs - number of return arguments |
||||||
|
* plhs - pointers to return arguments |
||||||
|
* nrhs - number of input arguments |
||||||
|
* prhs - pointers to input arguments |
||||||
|
*/ |
||||||
|
void mexFunction(int nlhs, mxArray* plhs[], |
||||||
|
int nrhs, const mxArray* prhs[]) { |
||||||
|
|
||||||
|
// parse the inputs
|
||||||
|
Bridge method_name(prhs[0]); |
||||||
|
|
||||||
|
Bridge handle(prhs[1]); |
||||||
|
std::vector<Bridge> brhs(prhs+2, prhs+nrhs); |
||||||
|
|
||||||
|
// retrieve the instance of interest
|
||||||
|
try { |
||||||
|
{{class.name}}& inst = instances.at(handle.address()); |
||||||
|
} catch (const std::out_of_range& e) { |
||||||
|
mexErrMsgTxt("Invalid object instance provided"); |
||||||
|
} |
||||||
|
|
||||||
|
// invoke the correct method on the data
|
||||||
|
try { |
||||||
|
std::vector<Bridge> blhs = (*methods.at(method_name))(inst, brhs); |
||||||
|
} catch (const std::out_of_range& e) { |
||||||
|
mexErrMsgTxt("Unknown method specified"); |
||||||
|
} |
||||||
|
|
||||||
|
{% block postfun %} |
||||||
|
{% endblock %} |
||||||
|
|
||||||
|
{% block cleanup %} |
||||||
|
{% endblock %} |
||||||
|
} |
||||||
|
|
||||||
|
}; // end namespace
|
@ -0,0 +1,27 @@ |
|||||||
|
% {{class.name | upper}} |
||||||
|
% Matlab handle class for OpenCV object classes |
||||||
|
classdef {{class.name}} < handle |
||||||
|
properties (SetAccess = private, Hidden = true) |
||||||
|
ptr_ = 0; % handle to the underlying c++ class instance |
||||||
|
end |
||||||
|
|
||||||
|
methods |
||||||
|
% constructor |
||||||
|
function this = {{class.name}}(varargin) |
||||||
|
this.ptr_ = {{class.name}}Bridge('new', varargin{:}); |
||||||
|
end |
||||||
|
|
||||||
|
% destructor |
||||||
|
function delete(this) |
||||||
|
{{className}}Bridge(this.ptr_, 'delete'); |
||||||
|
end |
||||||
|
|
||||||
|
{% for function in class.functions %} |
||||||
|
% {{function.__str__()}} |
||||||
|
function varargout = {{function.name}}(this, varargin) |
||||||
|
[varargout{1:nargout}] = {{class.name}}Bridge('{{function.name}}', this.ptr_, varargin{:}); |
||||||
|
end |
||||||
|
|
||||||
|
{% endfor %} |
||||||
|
end |
||||||
|
end |
Loading…
Reference in new issue