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