opencv/utils/extract_doublepointers.py

74 lines
2.1 KiB
Python
Executable File

#! /usr/bin/env python
"""
This script checks the OpenCV headers to find methods that take double pointers
to OpenCV data structures as in/out parameters.
These methods need a special treatment and therefore SWIG typemaps are generated.
"""
import sys
def convert_name(str):
count = 0
if (str[0:2] == "_p"):
p,s = convert_name(str[2:])
return(('*' + p),s)
return ('',str[1:])
if (sys.argv.__len__() < 1):
sys.exit(1)
infile = open(sys.argv[1],'r')
lines = infile.readlines()
infile.close()
foundit = 0
mytypes = []
for line in lines:
if (foundit == 0):
if (line.find('TYPES TABLE (BEGIN') > -1):
foundit = 1
else:
if (line.find('TYPES TABLE (END)') > -1):
foundit = 0
else:
stuff = line.split()
if (stuff.__len__() >= 3):
if (stuff[0] == "#define"):
mytypes.append(stuff[1][8:])
print """
/*//////////////////////////////////////////////////////////////////////////////////////////////////
// This file was automatically generated from the extract_doublepointers.py script found in the
// 'utils' subdirectory of the OpenCV distribution. Run it on the .cpp file generated by swig to
// generate the double pointer typemaps
/////////////////////////////////////////////////////////////////////////////////////////////////M*/
"""
for mytype in mytypes:
p,s = convert_name(mytype)
if (p.__len__() >= 2):
print '%typemap(in)',s,p,' (void * vptr, $*1_ltype buffer) {'
print '\tif ((SWIG_ConvertPtr($input, &vptr, $*1_descriptor, 1)) == -1){'
print '\t\tSWIG_fail;';
print '\t}'
print '\tbuffer = ($*1_ltype) vptr;'
print '\t$1=&buffer;'
print '}'
#rez = "" + s + " " + p + 'getPtrTo' + s + '( ' + s + ' ' + p[1:] + 'input)'
#sys.stdout.write(rez)
#sys.stdout.write('\n{\n\t' + s + ' ' + p + 'rez = new ' + s + p[1:] + '();')
#sys.stdout.write('\n\t*rez =input;\n\treturn(rez);\n}\n')
#sys.stdout.write(rez)
#sys.stdout.write(';\n')
# else:
# print '/* No conversions needed for type ', s, ' */'