Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[Manta] r2112 - trunk/Core/Util


Chronological Thread 
  • From: "James Bigler" <bigler@cs.utah.edu>
  • To: manta@sci.utah.edu
  • Subject: [Manta] r2112 - trunk/Core/Util
  • Date: Fri, 22 Feb 2008 17:25:08 -0700 (MST)

Author: bigler
Date: Fri Feb 22 17:25:08 2008
New Revision: 2112

Modified:
   trunk/Core/Util/Callback.h
   trunk/Core/Util/CallbackHelpers.h
   trunk/Core/Util/genCallbacks.py
Log:
Core/Util/Callback.h
Core/Util/genCallbacks.py

  Added two new function types required by DynBVH.

  genCallbacks.py should be fully functional now.

Core/Util/CallbackHelpers.h

  Generated version of the file.

  There were actually a couple of bugs in the hand written code.... :)


Modified: trunk/Core/Util/Callback.h
==============================================================================
--- trunk/Core/Util/Callback.h  (original)
+++ trunk/Core/Util/Callback.h  Fri Feb 22 17:25:08 2008
@@ -171,6 +171,20 @@
       return new Callback_1Data_2Arg<T, Data1, Arg1, Arg2>(ptr, pmf, arg1, 
arg2);
     }
 
+    // 1 call time args --- 4 creating time args
+    template<class T, typename Data1, typename Arg1, typename Arg2, typename 
Arg3, typename Arg4> static
+    CallbackBase_1Data<Data1>*
+    create(T* ptr, void (T::*pmf)(Data1, Arg1, Arg2, Arg3, Arg4), Arg1 arg1, 
Arg2 arg2, Arg3 arg3, Arg4 arg4) {
+      return new Callback_1Data_4Arg<T, Data1, Arg1, Arg2, Arg3, Arg4>(ptr, 
pmf, arg1, arg2, arg3, arg4);
+    }
+
+    // 1 call time args --- 5 creating time args
+    template<class T, typename Data1, typename Arg1, typename Arg2, typename 
Arg3, typename Arg4, typename Arg5> static
+    CallbackBase_1Data<Data1>*
+    create(T* ptr, void (T::*pmf)(Data1, Arg1, Arg2, Arg3, Arg4, Arg5), Arg1 
arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5) {
+      return new Callback_1Data_5Arg<T, Data1, Arg1, Arg2, Arg3, Arg4, 
Arg5>(ptr, pmf, arg1, arg2, arg3, arg4, arg5);
+    }
+
     // 2 call time args --- 0 creating time args
     template<class T, typename Data1, typename Data2> static
     CallbackBase_2Data<Data1, Data2>*

Modified: trunk/Core/Util/CallbackHelpers.h
==============================================================================
--- trunk/Core/Util/CallbackHelpers.h   (original)
+++ trunk/Core/Util/CallbackHelpers.h   Fri Feb 22 17:25:08 2008
@@ -6,12 +6,12 @@
 
 // You should not use these directly - use Callback::create instead
 namespace Manta {
-  ////////////////////////////////////////////////////////////
+  //////////////////////////////
   // Base classes that can be used by both the static and non-static
   // Callback classes.
   //
 
-  // 0 Data
+  // 0 call time args
   class CallbackBase_0Data : public CallbackHandle {
   public:
     CallbackBase_0Data()
@@ -26,7 +26,7 @@
     CallbackBase_0Data& operator=(const CallbackBase_0Data&);
   };
 
-  // 1 Data
+  // 1 call time args
   template<typename Data1>
   class CallbackBase_1Data : public CallbackHandle {
   public:
@@ -42,7 +42,7 @@
     CallbackBase_1Data& operator=(const CallbackBase_1Data&);
   };
 
-  // 2 Data
+  // 2 call time args
   template<typename Data1, typename Data2>
   class CallbackBase_2Data : public CallbackHandle {
   public:
@@ -58,7 +58,7 @@
     CallbackBase_2Data& operator=(const CallbackBase_2Data&);
   };
 
-  // 3 Data
+  // 3 call time args
   template<typename Data1, typename Data2, typename Data3>
   class CallbackBase_3Data : public CallbackHandle {
   public:
@@ -74,7 +74,7 @@
     CallbackBase_3Data& operator=(const CallbackBase_3Data&);
   };
 
-  // 4 Data
+  // 4 call time args
   template<typename Data1, typename Data2, typename Data3, typename Data4>
   class CallbackBase_4Data : public CallbackHandle {
   public:
@@ -90,7 +90,7 @@
     CallbackBase_4Data& operator=(const CallbackBase_4Data&);
   };
 
-  // 5 Data
+  // 5 call time args
   template<typename Data1, typename Data2, typename Data3, typename Data4, 
typename Data5>
   class CallbackBase_5Data : public CallbackHandle {
   public:
@@ -106,7 +106,7 @@
     CallbackBase_5Data& operator=(const CallbackBase_5Data&);
   };
 
-  // 6 Data
+  // 6 call time args
   template<typename Data1, typename Data2, typename Data3, typename Data4, 
typename Data5, typename Data6>
   class CallbackBase_6Data : public CallbackHandle {
   public:
@@ -122,17 +122,12 @@
     CallbackBase_6Data& operator=(const CallbackBase_6Data&);
   };
 
-
-  //////////////////////////////////////////////////////////
-  //////////////////////////////////////////////////////////
-  // These are the actuall implementations with the different number
-  // of arguments.
-
-  //////////////////////////////////////////////////////////
-  // Global functin or static class member functions
+  //////////////////////////////
+  // Global functions or static class member functions
   //
 
-  // 0 Data
+  // 0 call time args --- 0 creating time args
+
   class Callback_Static_0Data_0Arg : public CallbackBase_0Data {
   public:
     Callback_Static_0Data_0Arg(void (*pmf)())
@@ -150,6 +145,7 @@
     void (*pmf)();
   };
 
+  // 0 call time args --- 1 creating time args
   template<typename Arg1>
   class Callback_Static_0Data_1Arg : public CallbackBase_0Data {
   public:
@@ -169,6 +165,7 @@
     Arg1 arg1;
   };
 
+  // 0 call time args --- 2 creating time args
   template<typename Arg1, typename Arg2>
   class Callback_Static_0Data_2Arg : public CallbackBase_0Data {
   public:
@@ -189,6 +186,7 @@
     Arg2 arg2;
   };
 
+  // 0 call time args --- 5 creating time args
   template<typename Arg1, typename Arg2, typename Arg3, typename Arg4, 
typename Arg5>
   class Callback_Static_0Data_5Arg : public CallbackBase_0Data {
   public:
@@ -212,7 +210,7 @@
     Arg5 arg5;
   };
 
-  // 1 Data
+  // 1 call time args --- 0 creating time args
   template<typename Data1>
   class Callback_Static_1Data_0Arg : public CallbackBase_1Data<Data1> {
   public:
@@ -231,6 +229,7 @@
     void (*pmf)(Data1);
   };
 
+  // 1 call time args --- 1 creating time args
   template<typename Data1, typename Arg1>
   class Callback_Static_1Data_1Arg : public CallbackBase_1Data<Data1> {
   public:
@@ -250,6 +249,7 @@
     Arg1 arg1;
   };
 
+  // 1 call time args --- 2 creating time args
   template<typename Data1, typename Arg1, typename Arg2>
   class Callback_Static_1Data_2Arg : public CallbackBase_1Data<Data1> {
   public:
@@ -270,7 +270,7 @@
     Arg2 arg2;
   };
 
-  // 2 Data
+  // 2 call time args --- 0 creating time args
   template<typename Data1, typename Data2>
   class Callback_Static_2Data_0Arg : public CallbackBase_2Data<Data1, Data2> 
{
   public:
@@ -289,6 +289,7 @@
     void (*pmf)(Data1, Data2);
   };
 
+  // 2 call time args --- 2 creating time args
   template<typename Data1, typename Data2, typename Arg1, typename Arg2>
   class Callback_Static_2Data_2Arg : public CallbackBase_2Data<Data1, Data2> 
{
   public:
@@ -309,7 +310,7 @@
     Arg2 arg2;
   };
 
-  // 3 Data
+  // 3 call time args --- 1 creating time args
   template<typename Data1, typename Data2, typename Data3, typename Arg1>
   class Callback_Static_3Data_1Arg : public CallbackBase_3Data<Data1, Data2, 
Data3> {
   public:
@@ -329,6 +330,7 @@
     Arg1 arg1;
   };
 
+  // 3 call time args --- 2 creating time args
   template<typename Data1, typename Data2, typename Data3, typename Arg1, 
typename Arg2>
   class Callback_Static_3Data_2Arg : public CallbackBase_3Data<Data1, Data2, 
Data3> {
   public:
@@ -349,7 +351,7 @@
     Arg2 arg2;
   };
 
-  // 4 Data
+  // 4 call time args --- 2 creating time args
   template<typename Data1, typename Data2, typename Data3, typename Data4, 
typename Arg1, typename Arg2>
   class Callback_Static_4Data_2Arg : public CallbackBase_4Data<Data1, Data2, 
Data3, Data4> {
   public:
@@ -370,10 +372,10 @@
     Arg2 arg2;
   };
 
-  ///////////////////////////////////////////////////////////
+  //////////////////////////////
   // Class member functions
 
-  // 0 Data
+  // 0 call time args --- 0 creating time args
   template<class T>
   class Callback_0Data_0Arg : public CallbackBase_0Data {
   public:
@@ -393,27 +395,7 @@
     void (T::*pmf)();
   };
 
-#ifndef SWIG // For now these const versions won't compile in swig
-  template<class T>
-  class Callback_0Data_0Arg_const : public CallbackBase_0Data {
-  public:
-    Callback_0Data_0Arg_const(T* ptr, void (T::*pmf)() const)
-      : ptr(ptr), pmf(pmf)
-    {
-    }
-    virtual ~Callback_0Data_0Arg_const()
-    {
-    }
-    virtual void call()
-    {
-      (ptr->*pmf)();
-    }
-  private:
-    T* ptr;
-    void (T::*pmf)() const;
-  };
-#endif
-
+  // 0 call time args --- 1 creating time args
   template<class T, typename Arg1>
   class Callback_0Data_1Arg : public CallbackBase_0Data {
   public:
@@ -434,28 +416,7 @@
     Arg1 arg1;
   };
 
-#ifndef SWIG // For now these const versions won't compile in swig
-  template<class T, typename Arg1>
-  class Callback_0Data_1Arg_const : public CallbackBase_0Data {
-  public:
-    Callback_0Data_1Arg_const(T* ptr, void (T::*pmf)(Arg1) const, Arg1 arg1)
-      : ptr(ptr), pmf(pmf), arg1(arg1)
-    {
-    }
-    virtual ~Callback_0Data_1Arg_const()
-    {
-    }
-    virtual void call()
-    {
-      (ptr->*pmf)(arg1);
-    }
-  private:
-    T* ptr;
-    void (T::*pmf)(Arg1) const;
-    Arg1 arg1;
-  };
-#endif
-
+  // 0 call time args --- 2 creating time args
   template<class T, typename Arg1, typename Arg2>
   class Callback_0Data_2Arg : public CallbackBase_0Data {
   public:
@@ -477,29 +438,7 @@
     Arg2 arg2;
   };
 
-#ifndef SWIG // For now these const versions won't compile in swig
-  template<class T, typename Arg1, typename Arg2>
-  class Callback_0Data_2Arg_const : public CallbackBase_0Data {
-  public:
-    Callback_0Data_2Arg_const(T* ptr, void (T::*pmf)(Arg1, Arg2) const, Arg1 
arg1, Arg2 arg2)
-      : ptr(ptr), pmf(pmf), arg1(arg1), arg2(arg2)
-    {
-    }
-    virtual ~Callback_0Data_2Arg_const()
-    {
-    }
-    virtual void call()
-    {
-      (ptr->*pmf)(arg1, arg2);
-    }
-  private:
-    T* ptr;
-    void (T::*pmf)(Arg1, Arg2) const;
-    Arg1 arg1;
-    Arg2 arg2;
-  };
-#endif
-
+  // 0 call time args --- 3 creating time args
   template<class T, typename Arg1, typename Arg2, typename Arg3>
   class Callback_0Data_3Arg : public CallbackBase_0Data {
   public:
@@ -522,11 +461,11 @@
     Arg3 arg3;
   };
 
-
-  template<class T, typename Arg1, typename Arg2, typename Arg3, typename 
Arg4 >
+  // 0 call time args --- 4 creating time args
+  template<class T, typename Arg1, typename Arg2, typename Arg3, typename 
Arg4>
   class Callback_0Data_4Arg : public CallbackBase_0Data {
   public:
-    Callback_0Data_4Arg(T* ptr, void (T::*pmf)(Arg1, Arg2, Arg2, Arg4), Arg1 
arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4)
+    Callback_0Data_4Arg(T* ptr, void (T::*pmf)(Arg1, Arg2, Arg3, Arg4), Arg1 
arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4)
       : ptr(ptr), pmf(pmf), arg1(arg1), arg2(arg2), arg3(arg3), arg4(arg4)
     {
     }
@@ -546,7 +485,7 @@
     Arg4 arg4;
   };
 
-  // 1 Data
+  // 1 call time args --- 0 creating time args
   template<class T, typename Data1>
   class Callback_1Data_0Arg : public CallbackBase_1Data<Data1> {
   public:
@@ -566,6 +505,7 @@
     void (T::*pmf)(Data1);
   };
 
+  // 1 call time args --- 1 creating time args
   template<class T, typename Data1, typename Arg1>
   class Callback_1Data_1Arg : public CallbackBase_1Data<Data1> {
   public:
@@ -586,6 +526,7 @@
     Arg1 arg1;
   };
 
+  // 1 call time args --- 2 creating time args
   template<class T, typename Data1, typename Arg1, typename Arg2>
   class Callback_1Data_2Arg : public CallbackBase_1Data<Data1> {
   public:
@@ -607,6 +548,7 @@
     Arg2 arg2;
   };
 
+  // 1 call time args --- 4 creating time args
   template<class T, typename Data1, typename Arg1, typename Arg2, typename 
Arg3, typename Arg4>
   class Callback_1Data_4Arg : public CallbackBase_1Data<Data1> {
   public:
@@ -630,6 +572,7 @@
     Arg4 arg4;
   };
 
+  // 1 call time args --- 5 creating time args
   template<class T, typename Data1, typename Arg1, typename Arg2, typename 
Arg3, typename Arg4, typename Arg5>
   class Callback_1Data_5Arg : public CallbackBase_1Data<Data1> {
   public:
@@ -654,7 +597,7 @@
     Arg5 arg5;
   };
 
-  // 2 Data
+  // 2 call time args --- 0 creating time args
   template<class T, typename Data1, typename Data2>
   class Callback_2Data_0Arg : public CallbackBase_2Data<Data1, Data2> {
   public:
@@ -674,6 +617,7 @@
     void (T::*pmf)(Data1, Data2);
   };
 
+  // 2 call time args --- 1 creating time args
   template<class T, typename Data1, typename Data2, typename Arg1>
   class Callback_2Data_1Arg : public CallbackBase_2Data<Data1, Data2> {
   public:
@@ -694,6 +638,7 @@
     Arg1 arg1;
   };
 
+  // 2 call time args --- 2 creating time args
   template<class T, typename Data1, typename Data2, typename Arg1, typename 
Arg2>
   class Callback_2Data_2Arg : public CallbackBase_2Data<Data1, Data2> {
   public:
@@ -715,6 +660,7 @@
     Arg2 arg2;
   };
 
+  // 2 call time args --- 3 creating time args
   template<class T, typename Data1, typename Data2, typename Arg1, typename 
Arg2, typename Arg3>
   class Callback_2Data_3Arg : public CallbackBase_2Data<Data1, Data2> {
   public:
@@ -737,7 +683,7 @@
     Arg3 arg3;
   };
 
-  // 3 Data
+  // 3 call time args --- 0 creating time args
   template<class T, typename Data1, typename Data2, typename Data3>
   class Callback_3Data_0Arg : public CallbackBase_3Data<Data1, Data2, Data3> 
{
   public:
@@ -757,6 +703,7 @@
     void (T::*pmf)(Data1, Data2, Data3);
   };
 
+  // 3 call time args --- 1 creating time args
   template<class T, typename Data1, typename Data2, typename Data3, typename 
Arg1>
   class Callback_3Data_1Arg : public CallbackBase_3Data<Data1, Data2, Data3> 
{
   public:
@@ -777,7 +724,7 @@
     Arg1 arg1;
   };
 
-  // 4 Data
+  // 4 call time args --- 0 creating time args
   template<class T, typename Data1, typename Data2, typename Data3, typename 
Data4>
   class Callback_4Data_0Arg : public CallbackBase_4Data<Data1, Data2, Data3, 
Data4> {
   public:
@@ -797,6 +744,7 @@
     void (T::*pmf)(Data1, Data2, Data3, Data4);
   };
 
+  // 4 call time args --- 1 creating time args
   template<class T, typename Data1, typename Data2, typename Data3, typename 
Data4, typename Arg1>
   class Callback_4Data_1Arg : public CallbackBase_4Data<Data1, Data2, Data3, 
Data4> {
   public:
@@ -807,7 +755,7 @@
     virtual ~Callback_4Data_1Arg()
     {
     }
-    virtual void call(Data1 data1, Data2 data2, Data3 data3, Data4 data4, 
Arg1 arg1)
+    virtual void call(Data1 data1, Data2 data2, Data3 data3, Data4 data4)
     {
       (ptr->*pmf)(data1, data2, data3, data4, arg1);
     }
@@ -817,17 +765,18 @@
     Arg1 arg1;
   };
 
+  // 4 call time args --- 2 creating time args
   template<class T, typename Data1, typename Data2, typename Data3, typename 
Data4, typename Arg1, typename Arg2>
   class Callback_4Data_2Arg : public CallbackBase_4Data<Data1, Data2, Data3, 
Data4> {
   public:
-    Callback_4Data_2Arg(T* ptr, void (T::*pmf)(Data1, Data2, Data3, Data4, 
Arg1), Arg1 arg1, Arg2 arg2)
+    Callback_4Data_2Arg(T* ptr, void (T::*pmf)(Data1, Data2, Data3, Data4, 
Arg1, Arg2), Arg1 arg1, Arg2 arg2)
       : ptr(ptr), pmf(pmf), arg1(arg1), arg2(arg2)
     {
     }
     virtual ~Callback_4Data_2Arg()
     {
     }
-    virtual void call(Data1 data1, Data2 data2, Data3 data3, Data4 data4, 
Arg1 arg1, Arg2 arg2)
+    virtual void call(Data1 data1, Data2 data2, Data3 data3, Data4 data4)
     {
       (ptr->*pmf)(data1, data2, data3, data4, arg1, arg2);
     }
@@ -838,7 +787,7 @@
     Arg2 arg2;
   };
 
-  // 5 Data
+  // 5 call time args --- 0 creating time args
   template<class T, typename Data1, typename Data2, typename Data3, typename 
Data4, typename Data5>
   class Callback_5Data_0Arg : public CallbackBase_5Data<Data1, Data2, Data3, 
Data4, Data5> {
   public:
@@ -858,7 +807,7 @@
     void (T::*pmf)(Data1, Data2, Data3, Data4, Data5);
   };
 
-  // 6 Data
+  // 6 call time args --- 0 creating time args
   template<class T, typename Data1, typename Data2, typename Data3, typename 
Data4, typename Data5, typename Data6>
   class Callback_6Data_0Arg : public CallbackBase_6Data<Data1, Data2, Data3, 
Data4, Data5, Data6> {
   public:
@@ -878,6 +827,74 @@
     void (T::*pmf)(Data1, Data2, Data3, Data4, Data5, Data6);
   };
 
-}
+#ifndef SWIG // For now these const versions won't compile in swig
+  //////////////////////////////
+  // Class member functions
+
+  // 0 call time args --- 0 creating time args
+  template<class T>
+  class Callback_0Data_0Arg_const : public CallbackBase_0Data {
+  public:
+    Callback_0Data_0Arg_const(T* ptr, void (T::*pmf)() const)
+      : ptr(ptr), pmf(pmf)
+    {
+    }
+    virtual ~Callback_0Data_0Arg_const()
+    {
+    }
+    virtual void call()
+    {
+      (ptr->*pmf)();
+    }
+  private:
+    T* ptr;
+    void (T::*pmf)() const;
+  };
+
+  // 0 call time args --- 1 creating time args
+  template<class T, typename Arg1>
+  class Callback_0Data_1Arg_const : public CallbackBase_0Data {
+  public:
+    Callback_0Data_1Arg_const(T* ptr, void (T::*pmf)(Arg1) const, Arg1 arg1)
+      : ptr(ptr), pmf(pmf), arg1(arg1)
+    {
+    }
+    virtual ~Callback_0Data_1Arg_const()
+    {
+    }
+    virtual void call()
+    {
+      (ptr->*pmf)(arg1);
+    }
+  private:
+    T* ptr;
+    void (T::*pmf)(Arg1) const;
+    Arg1 arg1;
+  };
+
+  // 0 call time args --- 2 creating time args
+  template<class T, typename Arg1, typename Arg2>
+  class Callback_0Data_2Arg_const : public CallbackBase_0Data {
+  public:
+    Callback_0Data_2Arg_const(T* ptr, void (T::*pmf)(Arg1, Arg2) const, Arg1 
arg1, Arg2 arg2)
+      : ptr(ptr), pmf(pmf), arg1(arg1), arg2(arg2)
+    {
+    }
+    virtual ~Callback_0Data_2Arg_const()
+    {
+    }
+    virtual void call()
+    {
+      (ptr->*pmf)(arg1, arg2);
+    }
+  private:
+    T* ptr;
+    void (T::*pmf)(Arg1, Arg2) const;
+    Arg1 arg1;
+    Arg2 arg2;
+  };
+
+#endif // #ifndef SWIG
 
-#endif
+} // end namespace Manta
+#endif // #ifndef Manta_Interface_CallbackHelpers_h

Modified: trunk/Core/Util/genCallbacks.py
==============================================================================
--- trunk/Core/Util/genCallbacks.py     (original)
+++ trunk/Core/Util/genCallbacks.py     Fri Feb 22 17:25:08 2008
@@ -122,7 +122,7 @@
             self.file.write(" " * indent_ammount + string + "\n")
 
 class CallbackH (SourceFile):
-    def __init__(self, filename = "test-Callback.h"):
+    def __init__(self, filename = "Callback.h"):
         SourceFile.__init__(self, filename)
 
     def writeStart(self):
@@ -216,10 +216,17 @@
             self.write("")
 
 class CallbackHelpersH (SourceFile):
-    def __init__(self, filename = "test-CallbackHelpers.h"):
+    def __init__(self, filename = "CallbackHelpers.h"):
         SourceFile.__init__(self, filename)
         self.writtenClasses = []
 
+    def classDone(self, name):
+        if (name in self.writtenClasses):
+            return True
+        else:
+            self.writtenClasses.append(name)
+            return False
+
     def writeStart(self):
         self.write("")
         self.write("#ifndef Manta_Interface_CallbackHelpers_h")
@@ -231,6 +238,13 @@
         self.write("namespace Manta {")
         self.indent()
 
+    def writeEnd(self):
+        self.unindent()
+        self.write("} // end namespace Manta")
+        self.write("#endif // #ifndef Manta_Interface_CallbackHelpers_h")
+        # Close the file
+        self.file.close()
+
     def writeBaseClasses(self, functions):
         self.write("/" * 30)
         self.write("// Base classes that can be used by both the static and 
non-static")
@@ -240,12 +254,7 @@
 
         for function in functions:
             class_name = function.baseName(withTemplate=False)
-            if (class_name in self.writtenClasses):
-                # Already processed this one
-                continue
-            else:
-                # Add it to our list
-                self.writtenClasses.append(class_name)
+            if (self.classDone(class_name)): continue
             self.write("// %d call time args" % function.num_call_time_args)
             data_list = function.dataList()
             if (len(data_list) > 0):
@@ -277,12 +286,7 @@
 
         for function in functions:
             class_name = function.staticClassName(withTemplate=False)
-            if (class_name in self.writtenClasses):
-                # Already processed this one
-                continue
-            else:
-                # Add it to our list
-                self.writtenClasses.append(class_name)
+            if (self.classDone(class_name)): continue
             self.write("// %d call time args --- %d creating time args" % 
(function.num_call_time_args, function.num_creation_time_args))
             self.write("%s" % function.templateParameter() )
             self.write("class %s : public %s {" % (class_name, 
function.baseName(withTemplate=True)))
@@ -290,9 +294,9 @@
             self.indent()
             self.write("%s(void (*pmf)(%s)%s)" % (class_name, 
format(function.typeList()), function.functionArgList()))
             self.indent()
-            args = function.argList(prefix="arg")
-            args = map(lambda a: "%s(%s)" % (a,a), args)
-            self.write(": pmf(pmf)%s" % format( args, begin_seperator=", " ) 
)
+            initializers = function.argList(prefix="arg")
+            initializers = map(lambda a: "%s(%s)" % (a,a), initializers)
+            self.write(": pmf(pmf)%s" % format( initializers, 
begin_seperator=", " ) )
             self.unindent()
             self.write("{")
             self.write("}")
@@ -315,7 +319,60 @@
             self.unindent()
             self.write("};")
             self.write("")
-            
+
+    def writeClassMemberFunctions(self, functions, constant=False):
+        if (constant):
+            constant_text = " const"
+        else:
+            constant_text = ""
+        if (constant):
+            self.write("#ifndef SWIG // For now these const versions won't 
compile in swig", indent_ammount=0)
+        self.write("/" * 30)
+        self.write("// Class member functions")
+        self.write("");
+        for function in functions:
+            class_name = function.className(constant, withTemplate=False)
+            if (self.classDone(class_name)): continue
+            self.write("// %d call time args --- %d creating time args" % 
(function.num_call_time_args, function.num_creation_time_args))
+            self.write("template<class T" + format(function.typeList(), 
begin_seperator=", ", prefix="typename") + ">")
+            self.write("class %s : public %s {" % (class_name, 
function.baseName(withTemplate=True)))
+            self.write("public:")
+            self.indent()
+            self.write("%s(T* ptr, void (T::*pmf)(%s)%s%s)" % (class_name, 
format(function.typeList()), constant_text, function.functionArgList()))
+            self.indent()
+            initializers = function.argList(prefix="arg")
+            initializers = map(lambda a: "%s(%s)" % (a,a), initializers)
+            self.write(": ptr(ptr), pmf(pmf)%s" % format( initializers, 
begin_seperator=', '))
+            self.unindent()
+            self.write("{")
+            self.write("}")
+            self.write("virtual ~%s()" % class_name)
+            self.write("{")
+            self.write("}")
+            self.write("virtual void call(%s)" % function.callArgList())
+            self.write("{")
+            self.indent()
+            self.write("(ptr->*pmf)(%s);" % format( 
function.dataList(prefix="data") + function.argList(prefix="arg") ))
+            self.unindent()
+            self.write("}")
+            self.unindent()
+            self.write("private:")
+            self.indent()
+            self.write("T* ptr;")
+            self.write("void (T::*pmf)(%s)%s;" %
+                       (format(function.typeList()), constant_text))
+            map(lambda A,a: self.write("%s %s;" % (A,a)),
+                function.argList(prefix="Arg"),
+                function.argList(prefix="arg"))
+            self.unindent()
+            self.write("};")
+            self.write("")
+
+        # end for loop
+        if (constant):
+            self.write("#endif // #ifndef SWIG", indent_ammount=0)
+            self.write("")
+
 
 
 
@@ -337,7 +394,7 @@
     addFunctions(member_functions, 0, (0,1,2,3,4))
     addFunctions(const_member_functions, 0, (0,1,2))
 
-    addFunctions(member_functions, 1, (0,1,2))
+    addFunctions(member_functions, 1, (0,1,2,4,5))
     addFunctions(member_functions, 2, (0,1,2,3))
     addFunctions(member_functions, 3, (0,1))
     addFunctions(member_functions, 4, (0,1,2))
@@ -356,6 +413,9 @@
     callbackHelpersH.writeStart()
     callbackHelpersH.writeBaseClasses(static_functions + member_functions + 
const_member_functions)
     callbackHelpersH.writeGlobalStaticFunctions(static_functions)
+    callbackHelpersH.writeClassMemberFunctions(member_functions)
+    callbackHelpersH.writeClassMemberFunctions(const_member_functions, 
constant=True)
+    callbackHelpersH.writeEnd()
 
 if __name__ == "__main__":
     main()




  • [Manta] r2112 - trunk/Core/Util, James Bigler, 02/22/2008

Archive powered by MHonArc 2.6.16.

Top of page