예제 #1
0
 def init_class(self, z):
     """Initializes a class z"""
     if not z.pds in self.decls_reg:
         self.register_ti(z.pds) # register the class if not done so
     z.include()
     funs = []
     try:
         funs.extend(z.constructors())
     except RuntimeError:
         pass
     try:
         funs.extend(z.mem_funs())
     except RuntimeError:
         pass
     try:
         funs.extend(z.operators())
     except RuntimeError:
         pass
     _c.init_transformers(funs)
     z._funs = funs
     _c.add_decl_desc(z)
예제 #2
0
 def init_class(self, z):
     """Initializes a class z"""
     if not z.pds in self.decls_reg:
         self.register_ti(z.pds)  # register the class if not done so
     z.include()
     funs = []
     try:
         funs.extend(z.constructors())
     except RuntimeError:
         pass
     try:
         funs.extend(z.mem_funs())
     except RuntimeError:
         pass
     try:
         funs.extend(z.operators())
     except RuntimeError:
         pass
     _c.init_transformers(funs)
     z._funs = funs
     _c.add_decl_desc(z)
예제 #3
0
def beautify_func_list(func_list):
    func_list = [f for f in func_list if not f.ignore]

    # fix default values
    # don't remove std::vector default values, old compilers _need_ std::allocator removed
    for f in func_list:
        for arg in f.arguments:
            if isinstance(arg.default_value, str):
                repl_list = {
                    'std::basic_string<char, std::char_traits<char>, std::allocator<char> >': 'std::string',
                    'std::vector<cv::Point_<int>, std::allocator<cv::Point_<int> > >': 'std::vector<cv::Point>',
                    'std::vector<cv::Scalar_<double>, std::allocator<cv::Scalar_<double> > >': 'std::vector<cv::Scalar>',
                    'std::vector<int, std::allocator<int> >': 'std::vector<int>',
                    'std::vector<cv::Vec<int, 4>, std::allocator<cv::Vec<int, 4> > >': 'std::vector<cv::Vec4i>',
                }
                for z in repl_list:
                    arg.default_value = arg.default_value.replace(z, repl_list[z])

    # one-to-one function argument
    for f in func_list:
        for arg in f.arguments:
            if is_arg_touched(f, arg.name):
                continue
            pds = _c.unique_pds(arg.type.partial_decl_string)
            if pds in _c.c2cpp:
                f._transformer_creators.append(_FT.input_as_FixType(pds, _c.c2cpp[pds], arg.name))
            elif pds in ['CvRNG *', 'CvRNG &', 'CvRNG cosnt *', 'CvRNG const &']:
                f._transformer_creators.append(_FT.input_asRNG(arg.name))
            elif pds in ['CvFileStorage *', 'CvFileStorage const *']:
                f._transformer_creators.append(_FT.input_as_FileStorage(arg.name))
            elif pds in ['CvFileNode *', 'CvFileNode const *']:
                f._transformer_creators.append(_FT.input_as_FileNode(arg.name))
            elif pds in ['CvMemStorage *', 'CvMemStorage const *']:
                f._transformer_creators.append(_FT.input_as_MemStorage(arg.name))
            elif pds in ['CvSparseMat *', 'CvSparseMat &', 'CvSparseMat const *', 'CvSparseMat const &']:
                f._transformer_creators.append(_FT.input_asSparseMat(arg.name))
            elif pds in ["IplImage *", "IplImage const *", "CvArr *", "CvArr const *",
                "CvMat *", "CvMat const *", "cv::Range const *"]:
                f._transformer_creators.append(_FT.input_as_Mat(arg.name))

    # function argument int *sizes and int dims
    for f in func_list:
        for arg in f.arguments:
            if is_arg_touched(f, arg.name):
                continue
            if arg.name == 'sizes' and _D.is_pointer(arg.type):
                for arg2 in f.arguments:
                    if arg2.name == 'dims' and _D.is_integral(arg2.type):
                        f._transformer_creators.append(_FT.input_array1d('sizes', 'dims'))
                        break
            if arg.name == '_sizes' and _D.is_pointer(arg.type):
                for arg2 in f.arguments:
                    if arg2.name == '_ndims' and _D.is_integral(arg2.type):
                        f._transformer_creators.append(_FT.input_array1d('_sizes', '_ndims'))
                        break
                    if arg2.name == 'dims' and _D.is_integral(arg2.type):
                        f._transformer_creators.append(_FT.input_array1d('_sizes', 'dims'))
                        break
            if arg.name == '_newsz' and _D.is_pointer(arg.type):
                for arg2 in f.arguments:
                    if arg2.name == '_newndims' and _D.is_integral(arg2.type):
                        f._transformer_creators.append(_FT.input_array1d('_newsz', '_newndims'))
                        break

    # function argument const CvPoint2D32f * src and const CvPoint2D32f * dst
    for f in func_list:
        for arg in f.arguments:
            if is_arg_touched(f, arg.name):
                continue
            if arg.name == 'src' and _D.is_pointer(arg.type) and 'CvPoint2D32f' in arg.type.decl_string:
                for arg2 in f.arguments:
                    if arg2.name == 'dst' and _D.is_pointer(arg2.type) and 'CvPoint2D32f' in arg2.type.decl_string:
                        f._transformer_creators.append(_FT.input_array1d('src'))
                        f._transformer_creators.append(_FT.input_array1d('dst'))
                        break

    #  argument 'void *data'
    for f in func_list:
        for arg in f.arguments:
            if is_arg_touched(f, arg.name):
                continue
            if arg.name == 'data' and _D.is_void_pointer(arg.type):
                f._transformer_creators.append(_FT.input_string(arg.name))
                self.add_doc(f.name, "'data' is represented by a string")

    # final step: apply all the function transformations
    for f in func_list:
        if len(f._transformer_creators) > 0:
            sort_transformers(f)

            f.add_transformation(*f._transformer_creators, **f._transformer_kwds)
            if 'unique_function_name' in f._transformer_kwds:
                f.transformations[0].unique_name = f._transformer_kwds['unique_function_name']
            else:
                s = f.transformations[0].unique_name
                repl_dict = {
                    'operator()': '__call__',
                }
                for t in repl_dict:
                    if t in s:
                        s = s.replace(t, repl_dict[t])
                        f.transformations[0].unique_name = s
                        f.transformations[0].alias = repl_dict[t]
                        break

        _c.add_decl_desc(f)
예제 #4
0
def beautify_func_list(func_list):
    func_list = [f for f in func_list if not f.ignore]

    # fix default values
    # don't remove std::vector default values, old compilers _need_ std::allocator removed
    for f in func_list:
        for arg in f.arguments:
            if isinstance(arg.default_value, str):
                repl_list = {
                    'std::basic_string<char, std::char_traits<char>, std::allocator<char> >':
                    'std::string',
                    'std::vector<cv::Point_<int>, std::allocator<cv::Point_<int> > >':
                    'std::vector<cv::Point>',
                    'std::vector<cv::Scalar_<double>, std::allocator<cv::Scalar_<double> > >':
                    'std::vector<cv::Scalar>',
                    'std::vector<int, std::allocator<int> >':
                    'std::vector<int>',
                    'std::vector<cv::Vec<int, 4>, std::allocator<cv::Vec<int, 4> > >':
                    'std::vector<cv::Vec4i>',
                }
                for z in repl_list:
                    arg.default_value = arg.default_value.replace(
                        z, repl_list[z])

    # one-to-one function argument
    for f in func_list:
        for arg in f.arguments:
            if is_arg_touched(f, arg.name):
                continue
            pds = _c.unique_pds(arg.type.partial_decl_string)
            if pds in _c.c2cpp:
                f._transformer_creators.append(
                    _FT.input_as_FixType(pds, _c.c2cpp[pds], arg.name))
            elif pds in [
                    'CvRNG *', 'CvRNG &', 'CvRNG cosnt *', 'CvRNG const &'
            ]:
                f._transformer_creators.append(_FT.input_asRNG(arg.name))
            elif pds in ['CvFileStorage *', 'CvFileStorage const *']:
                f._transformer_creators.append(
                    _FT.input_as_FileStorage(arg.name))
            elif pds in ['CvFileNode *', 'CvFileNode const *']:
                f._transformer_creators.append(_FT.input_as_FileNode(arg.name))
            elif pds in ['CvMemStorage *', 'CvMemStorage const *']:
                f._transformer_creators.append(
                    _FT.input_as_MemStorage(arg.name))
            elif pds in [
                    'CvSparseMat *', 'CvSparseMat &', 'CvSparseMat const *',
                    'CvSparseMat const &'
            ]:
                f._transformer_creators.append(_FT.input_asSparseMat(arg.name))
            elif pds in [
                    "IplImage *", "IplImage const *", "CvArr *",
                    "CvArr const *", "CvMat *", "CvMat const *",
                    "cv::Range const *"
            ]:
                f._transformer_creators.append(_FT.input_as_Mat(arg.name))

    # function argument int *sizes and int dims
    for f in func_list:
        for arg in f.arguments:
            if is_arg_touched(f, arg.name):
                continue
            if arg.name == 'sizes' and _D.is_pointer(arg.type):
                for arg2 in f.arguments:
                    if arg2.name == 'dims' and _D.is_integral(arg2.type):
                        f._transformer_creators.append(
                            _FT.input_array1d('sizes', 'dims'))
                        break
            if arg.name == '_sizes' and _D.is_pointer(arg.type):
                for arg2 in f.arguments:
                    if arg2.name == '_ndims' and _D.is_integral(arg2.type):
                        f._transformer_creators.append(
                            _FT.input_array1d('_sizes', '_ndims'))
                        break
                    if arg2.name == 'dims' and _D.is_integral(arg2.type):
                        f._transformer_creators.append(
                            _FT.input_array1d('_sizes', 'dims'))
                        break
            if arg.name == '_newsz' and _D.is_pointer(arg.type):
                for arg2 in f.arguments:
                    if arg2.name == '_newndims' and _D.is_integral(arg2.type):
                        f._transformer_creators.append(
                            _FT.input_array1d('_newsz', '_newndims'))
                        break

    # function argument const CvPoint2D32f * src and const CvPoint2D32f * dst
    for f in func_list:
        for arg in f.arguments:
            if is_arg_touched(f, arg.name):
                continue
            if arg.name == 'src' and _D.is_pointer(
                    arg.type) and 'CvPoint2D32f' in arg.type.decl_string:
                for arg2 in f.arguments:
                    if arg2.name == 'dst' and _D.is_pointer(
                            arg2.type
                    ) and 'CvPoint2D32f' in arg2.type.decl_string:
                        f._transformer_creators.append(
                            _FT.input_array1d('src'))
                        f._transformer_creators.append(
                            _FT.input_array1d('dst'))
                        break

    #  argument 'void *data'
    for f in func_list:
        for arg in f.arguments:
            if is_arg_touched(f, arg.name):
                continue
            if arg.name == 'data' and _D.is_void_pointer(arg.type):
                f._transformer_creators.append(_FT.input_string(arg.name))
                self.add_doc(f.name, "'data' is represented by a string")

    # final step: apply all the function transformations
    for f in func_list:
        if len(f._transformer_creators) > 0:
            sort_transformers(f)

            f.add_transformation(*f._transformer_creators,
                                 **f._transformer_kwds)
            if 'unique_function_name' in f._transformer_kwds:
                f.transformations[0].unique_name = f._transformer_kwds[
                    'unique_function_name']
            else:
                s = f.transformations[0].unique_name
                repl_dict = {
                    'operator()': '__call__',
                }
                for t in repl_dict:
                    if t in s:
                        s = s.replace(t, repl_dict[t])
                        f.transformations[0].unique_name = s
                        f.transformations[0].alias = repl_dict[t]
                        break

        _c.add_decl_desc(f)