public override void Eval(Executor exec) { Function fResultRelation = exec.PopFxn(); Function fArgRelation = exec.PopFxn(); Function fBaseCase = exec.PopFxn(); Function fCondition = exec.PopFxn(); BinRecHelper h = new BinRecHelper(exec, fResultRelation, fArgRelation, fBaseCase, fCondition); h.Exec(); }
public void Exec() { if (!Config.gbMultiThreadBinRec) { LocalExec(); return; } mCondition.Eval(mExec); if (mExec.PopBool()) { mBaseCase.Eval(mExec); } else { mArgRelation.Eval(mExec); Executor e2; e2 = new Executor(); e2.Push(mExec.Pop()); BinRecHelper h2 = new BinRecHelper(e2, mResultRelation, mArgRelation, mBaseCase, mCondition); Thread t = new Thread(new ParameterizedThreadStart(LaunchThread)); t.Start(h2); LocalExec(); mWait.WaitOne(); mExec.Push(e2.Pop()); mResultRelation.Eval(mExec); } }