00001 #include "FunctionThread.h" 00002 #include "DS_List.h" 00003 00004 class InlineFunctorProcessor; 00005 00007 class InlineFunctor : public RakNet::Functor 00008 { 00009 protected: 00011 virtual void HandleResult(bool wasCancelled, void *context); 00012 00014 int callDepth; 00015 00017 InlineFunctorProcessor *ifp; 00018 friend class InlineFunctorProcessor; 00019 }; 00020 00022 class InlineFunctorProcessor 00023 { 00024 public: 00025 InlineFunctorProcessor(); 00026 ~InlineFunctorProcessor(); 00027 00031 void StartThreads(int numThreads); 00032 00035 void StopThreads(bool blockOnCurrentProcessing); 00036 00040 void YieldOnFunctor(InlineFunctor *inlineFunctor); 00041 00045 bool UpdateIFP(void); 00046 00049 void Pop(int threadCallDepth); 00050 00051 protected: 00052 00054 unsigned GetCallDepth(void) const; 00055 00057 RakNet::FunctionThread functionThread; 00058 00060 DataStructures::List<bool> completedThreads; 00061 };