mirror of
https://github.com/opencv/opencv.git
synced 2025-01-19 06:53:50 +08:00
Added class templates
This commit is contained in:
parent
c29a98ef84
commit
09e294711d
@ -1,6 +1,17 @@
|
||||
from textwrap import TextWrapper
|
||||
from string import split, join
|
||||
import re
|
||||
|
||||
def toUpperCamelCase(text):
|
||||
return text[0].upper() + text[1:]
|
||||
|
||||
def toLowerCamelCase(text):
|
||||
return text[0].lower() + text[1:]
|
||||
|
||||
def toUnderCase(text):
|
||||
s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', text)
|
||||
return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).lower()
|
||||
|
||||
def comment(text, wrap=80, escape='% ', escape_first='', escape_last=''):
|
||||
'''comment filter
|
||||
Takes a string in text, and wraps it to wrap characters in length with
|
||||
|
85
modules/matlab/generator/templates/template_class_base.cpp
Normal file
85
modules/matlab/generator/templates/template_class_base.cpp
Normal file
@ -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
|
27
modules/matlab/generator/templates/template_class_base.m
Normal file
27
modules/matlab/generator/templates/template_class_base.m
Normal file
@ -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
|
@ -15,7 +15,7 @@
|
||||
|
||||
/*
|
||||
* {{ fun.name }}
|
||||
* Main mex entry point
|
||||
* Gateway routine
|
||||
* nlhs - number of return arguments
|
||||
* plhs - pointers to return arguments
|
||||
* nrhs - number of input arguments
|
||||
|
Loading…
Reference in New Issue
Block a user