#include "InlineFunctor.h" void InlineFunctor::HandleResult(bool wasCancelled, void *context) { ifp->Pop(callDepth); } InlineFunctorProcessor::InlineFunctorProcessor() { } InlineFunctorProcessor::~InlineFunctorProcessor() { StopThreads(false); } void InlineFunctorProcessor::StartThreads(int numThreads) { functionThread.StartThreads(numThreads); } void InlineFunctorProcessor::StopThreads(bool blockOnCurrentProcessing) { functionThread.StopThreads(blockOnCurrentProcessing); } void InlineFunctorProcessor::YieldOnFunctor(InlineFunctor *inlineFunctor) { inlineFunctor->callDepth=GetCallDepth(); inlineFunctor->ifp=this; functionThread.Push(inlineFunctor); completedThreads.Push(false); } bool InlineFunctorProcessor::UpdateIFP(void) { functionThread.CallResultHandlers(); if (completedThreads.Size() && completedThreads[completedThreads.Size()-1]==true) { completedThreads.Pop(); return true; } return false; } void InlineFunctorProcessor::Pop(int threadCallDepth) { completedThreads[threadCallDepth]=true; } unsigned InlineFunctorProcessor::GetCallDepth(void) const { return completedThreads.Size(); }