nested classes support
authorAlexander Mordvintsev <Alexander.Mordvintsev@transas.com>
Mon, 18 Aug 2014 12:15:30 +0000 (16:15 +0400)
committerAlexander Mordvintsev <Alexander.Mordvintsev@transas.com>
Tue, 19 Aug 2014 12:40:08 +0000 (16:40 +0400)
modules/python/src2/cv2.cpp
modules/python/src2/gen2.py

index f5df883..fe37c8c 100644 (file)
@@ -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;
index 5926cec..cdf4431 100755 (executable)
@@ -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]