74 lines
2.1 KiB
Python
Executable File
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, ' */'
|
|
|
|
|