Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[Manta] r1931 - in trunk/Core: Thread Util


Chronological Thread 
  • From: kmorley@sci.utah.edu
  • To: manta@sci.utah.edu
  • Subject: [Manta] r1931 - in trunk/Core: Thread Util
  • Date: Fri, 14 Dec 2007 17:16:54 -0700 (MST)

Author: kmorley
Date: Fri Dec 14 17:16:54 2007
New Revision: 1931

Modified:
   trunk/Core/Thread/Runnable.cc
   trunk/Core/Thread/Runnable.h
   trunk/Core/Util/Callback.h
   trunk/Core/Util/CallbackHelpers.h
Log:

Added RunnableCallback class to make running an arbitrary
function in a thread easier.

Added new static callback for 5 creation time args, 0 calltime.



Modified: trunk/Core/Thread/Runnable.cc
==============================================================================
--- trunk/Core/Thread/Runnable.cc       (original)
+++ trunk/Core/Thread/Runnable.cc       Fri Dec 14 17:16:54 2007
@@ -43,6 +43,8 @@
 #include <Core/Thread/Runnable.h>
 #include <Core/Thread/Thread.h>
 #include <Core/Thread/ThreadError.h>
+#include <Core/Util/CallbackHelpers.h>
+
 namespace Manta {
 
 
@@ -57,6 +59,27 @@
   if(my_thread_){
     throw ThreadError("Runnable is being destroyed while thread is still 
running\n");
   }
+}
+
+
+
+RunnableCallback::RunnableCallback( CallbackBase_0Data* callback, 
+    bool free_callback )
+  : _callback( callback ), _free_callback( free_callback )
+{
+}
+
+
+RunnableCallback::~RunnableCallback()
+{
+  if ( _free_callback )
+    delete _callback;
+}
+
+
+void RunnableCallback::run()
+{ 
+  _callback->call();
 }
 
 

Modified: trunk/Core/Thread/Runnable.h
==============================================================================
--- trunk/Core/Thread/Runnable.h        (original)
+++ trunk/Core/Thread/Runnable.h        Fri Dec 14 17:16:54 2007
@@ -46,6 +46,7 @@
 namespace Manta {
 
   class Thread;
+  class CallbackBase_0Data;
 
 /**************************************
  
@@ -97,6 +98,29 @@
     // Cannot copy them
     Runnable(const Runnable&);
     Runnable& operator=(const Runnable&);
+  };
+
+
+  //
+  // Class to simplify running an arbitrary 0Data callback in a Manta::Thread
+  // 
+  class RunnableCallback : public Runnable {
+  public:
+    // Create Runabble for this function.  Param free_callback determines 
+    // if the RunnableCallback should free the callback object in the 
+    // RunnableCallback destructor. 
+    RunnableCallback( CallbackBase_0Data* callback, bool free_callback = 
true );
+
+    virtual ~RunnableCallback();
+
+    // Simply calls the callback
+    virtual void run(); 
+
+  private:
+    RunnableCallback() {}
+
+    CallbackBase_0Data* _callback;
+    bool                _free_callback;
   };
 }
 

Modified: trunk/Core/Util/Callback.h
==============================================================================
--- trunk/Core/Util/Callback.h  (original)
+++ trunk/Core/Util/Callback.h  Fri Dec 14 17:16:54 2007
@@ -46,6 +46,14 @@
       return new Callback_Static_0Data_2Arg<Arg1,Arg2>(pmf, arg1, arg2);
     }
 
+    template<typename Arg1, typename Arg2, typename Arg3, typename Arg4, 
typename Arg5> static
+    CallbackBase_0Data*
+    create(void (*pmf)(Arg1, Arg2, Arg3, Arg4, Arg5), Arg1 arg1, Arg2 arg2, 
+        Arg3 arg3, Arg4 arg4, Arg5 arg5) {
+      return new Callback_Static_0Data_5Arg<Arg1,Arg2,Arg3,Arg4,Arg5>(
+          pmf, arg1, arg2, arg3, arg4, arg5);
+    }
+
     // 1 Data
     template<typename Data1> static
     CallbackBase_1Data<Data1>*

Modified: trunk/Core/Util/CallbackHelpers.h
==============================================================================
--- trunk/Core/Util/CallbackHelpers.h   (original)
+++ trunk/Core/Util/CallbackHelpers.h   Fri Dec 14 17:16:54 2007
@@ -189,6 +189,30 @@
     Arg2 arg2;
   };
 
+  template<typename Arg1, typename Arg2, typename Arg3, typename Arg4, 
typename Arg5>
+  class Callback_Static_0Data_5Arg : public CallbackBase_0Data {
+  public:
+    Callback_Static_0Data_5Arg(void (*pmf)(Arg1, Arg2, Arg3, Arg4, Arg5), 
+        Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5)
+      : pmf(pmf), arg1(arg1), arg2(arg2), arg3(arg3), arg4(arg4), arg5(arg5)
+    {
+    }
+    virtual ~Callback_Static_0Data_5Arg()
+    {
+    }
+    virtual void call()
+    {
+      pmf(arg1, arg2, arg3, arg4, arg5);
+    }
+  private:
+    void (*pmf)(Arg1, Arg2, Arg3, Arg4, Arg5);
+    Arg1 arg1;
+    Arg2 arg2;
+    Arg3 arg3;
+    Arg4 arg4;
+    Arg5 arg5;
+  };
+
   // 1 Data
   template<typename Data1>
   class Callback_Static_1Data_0Arg : public CallbackBase_1Data<Data1> {




  • [Manta] r1931 - in trunk/Core: Thread Util, kmorley, 12/14/2007

Archive powered by MHonArc 2.6.16.

Top of page