コード例 #1
0
ファイル: Lift.cs プロジェクト: JoinPatterns/ScalableJoins
        private List<Pair<Lift, WaitTime>> WaitTimes(Dir dir)
        {
            List<Pair<Lift, WaitTime>> wait = new List<Pair<Lift, WaitTime>>();

              foreach (Lift lift in mLifts) {
            Buffer<Pair<Time, Buffer<bool>>> b = new Buffer<Pair<Time, Buffer<bool>>>();
            lift.HowLong(Helpers.pair(Helpers.pair(mNum, dir), b));
            WaitTime waittime = b.Get();
            wait.Add(Helpers.pair(lift, waittime));
              }

              return wait;
        }
コード例 #2
0
ファイル: Lift.cs プロジェクト: JoinPatterns/ScalableJoins
 private void CabinLoop()
 {
     Buffer<Action> b = new Buffer<Action>();
       while (true) {
     mLift.Arrived(Helpers.pair(mFloors[mFloor], b));
     switch (b.Get()) {
       case Action.Wait:
     UnderViewLock(delegate { mState = CabinState.Waiting; });
     break;
       case Action.Stop:
     mFloors[mFloor].Arrived(mLift);
     UnderViewLock(delegate { mState = CabinState.Stopping; });
     WaitForEndTransition();
     break;
       case Action.Up:
     UnderViewLock(delegate {
        nextY = (mFloor + 1) * Program.COLUMNHEIGHT;
        mState = CabinState.GoingUp;
     });
     WaitForEndTransition();
     mFloor++;
     break;
       case Action.Down:
     UnderViewLock(delegate {
       nextY = (mFloor - 1) * Program.COLUMNHEIGHT;
       mState = CabinState.GoingDown;
     });
     WaitForEndTransition();
     mFloor--;
     break;
       default: Debug.Assert(false);
     break;
     }
       }
 }