Advertisement
agmike

Track search using call stack

Aug 27th, 2014
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.01 KB | None | 0 0
  1.     RFHumpRoute Scan(GSTrackSearch it, Trackside origin)
  2.     {
  3.         if (!IncHops())
  4.             return null;
  5.         RFHumpRoute ret = null;
  6.         Trackside prev = origin, found;
  7.         while (it.SearchNextObject()) {
  8.             if (!(found = cast <Trackside> it.GetObject()))
  9.                 continue;
  10.             RFHumpMarker marker;
  11.             Junction junc;
  12.             if ((marker = cast <RFHumpMarker> found) and marker.HumpTrack >= 0) {
  13.                 if (marker.HumpTrack > 0) {
  14.                     ret = new RFHumpRoute();
  15.                     ret.TrackNumber = marker.HumpTrack;
  16.                     ret.MarkerId = marker.GetId();
  17.                 }
  18.                 break;
  19.             }
  20.             else if (junc = cast <Junction> found) {
  21.                 int dir = GetJunctionDirectionToObject(junc, prev);
  22.                 if  (dir == Junction.DIRECTION_BACKWARD) {
  23.                     ret = new RFHumpRoute();
  24.                     ret.JnId = junc.GetId();
  25.                     ret.Left = Scan(junc.BeginTrackSearch(Junction.DIRECTION_LEFT), junc);
  26.                     ret.Right = Scan(junc.BeginTrackSearch(Junction.DIRECTION_RIGHT), junc);
  27.                 }
  28.                 else if (dir == Junction.DIRECTION_LEFT) {
  29.                     ret = new RFHumpRoute();
  30.                     ret.JnId = junc.GetId();
  31.                     ret.Left = Scan(junc.BeginTrackSearch(Junction.DIRECTION_BACKWARD), junc);
  32.                 }
  33.                 else if (dir == Junction.DIRECTION_RIGHT) {
  34.                     ret = new RFHumpRoute();
  35.                     ret.JnId = junc.GetId();
  36.                     ret.Right = Scan(junc.BeginTrackSearch(Junction.DIRECTION_BACKWARD), junc);
  37.                 }
  38.                 else {
  39.                     BadJunctionId = junc.GetId();
  40.                 }
  41.                 break;
  42.             }
  43.             if (it.GetDistance() > MaxSearchDistance)
  44.                 break;
  45.             prev = found;
  46.             IncOps();
  47.         }
  48.         DecHops();
  49.         return ret;
  50.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement