nested classes support

pull/3131/head
Alexander Mordvintsev 11 years ago
parent 5ad7f9910f
commit 4a519a25f3
  1. 2
      modules/python/src2/cv2.cpp
  2. 27
      modules/python/src2/gen2.py

@ -83,8 +83,6 @@ catch (const cv::Exception &e) \
}
using namespace cv;
using cv::flann::IndexParams;
using cv::flann::SearchParams;
typedef std::vector<uchar> vector_uchar;
typedef std::vector<char> vector_char;

@ -774,18 +774,17 @@ class PythonWrapperGenerator(object):
chunks = decl[0].split('.')
name = chunks[-1]
cname = '::'.join(chunks)
namespace = '.'.join(chunks[:-1])
classname = normalize_class_name(namespace)
if classname in self.classes:
bareclassname = chunks[-2]
namespace = '.'.join(chunks[:-2])
if normalize_class_name(namespace) in self.classes:
print('Note: skipping "%s" (nested classes are currently not supported)'%decl[0])
return
else:
classname = ''
bareclassname = ''
namespace = chunks[:-1]
classes = []
while normalize_class_name('.'.join(namespace)) in self.classes:
classes.insert(0, namespace.pop())
classname = ''
bareclassname = ''
if classes:
classname = normalize_class_name('.'.join(namespace+classes))
bareclassname = classes[-1]
namespace = '.'.join(namespace)
isconstructor = name == bareclassname
isclassmethod = False
for m in decl[2]:
@ -794,8 +793,10 @@ class PythonWrapperGenerator(object):
elif m.startswith("="):
name = m[1:]
if isclassmethod:
name = bareclassname+"_"+name
name = "_".join(classes+[name])
classname = ''
elif isconstructor:
name = "_".join(classes[:-1]+[name])
if classname and not isconstructor:
cname = chunks[-1]

Loading…
Cancel
Save