예제 #1
0
        bool Evaluate(ExprNode n, ExprValue result)
        {
            throw new NotImplementedException();

            //ExprValue left = new ExprValue(NodeOp.None);
            //ExprValue right = new ExprValue(NodeOp.None);
            //String prop;

            //if(!n)
            //  return false;
            //switch(n._op) {

            //  case Dot:

            //    result._op = Addr;
            //    if(!(n._left)) {
            //      result._train = this._train;		// .<property> .   this.train
            //      result._op = TrainRef;
            //      if(!result._train) {
            //        wxStrcat(expr_buff, wxPorting.T("no current train for '.'"));
            //        return false;
            //      }
            //      if(result._train.position)
            //        TraceCoord(result._train.position.x, result._train.position.y);
            //    } else {
            //      if(!Evaluate(n._left, result))
            //        return false;
            //    }
            //    result._txt = (n._right && n._right._op == String) ? n._right._txt : n._txt;
            //    if(_forAddr)
            //      return true;

            //    prop = result._txt;
            //    if(!prop)
            //      return false;

            //    switch(result._op) {

            //      case TrainRef:

            //        if(!result._train)
            //          return false;
            //        return result._train.GetPropertyValue(prop, result);

            //      case SwitchRef:

            //        if(!wxStrcmp(prop, wxPorting.T("thrown")) && result._track) {
            //          result._op = Number;
            //          result._val = result._track.switched;
            //          return true;
            //        }

            //      case Addr:
            //      case TrackRef:
            //      default:

            //        if(!result._track)
            //          return false;
            //        return result._track.GetPropertyValue(prop, result);

            //      case SignalRef:

            //        if(!result._signal)
            //          return false;
            //        return result._signal.GetPropertyValue(prop, result);

            //    }

            //  default:

            //    return InterpreterData.Evaluate(n, result);
            //}
            //return false;
        }
예제 #2
0
        public bool Evaluate(ExprNode n, ExprValue result)
        {
            throw new NotImplementedException();
            //ExprValue left = new ExprValue(NodeOp.NodeOp.None);
            //ExprValue right = new ExprValue(NodeOp.None);
            //Track t;
            //int val;
            //bool oldForAddr;

            //switch(n._op) {

            //  case SignalRef:

            //    if(n._txt) {
            //      // signal by name
            //      result._op = n._op;
            //      result._signal = findSignalNamed(n._txt);
            //      expr_buff + Globals.wxStrlen(expr_buff) = String.Format( wxPorting.T("Signal(%s)"), n._txt);
            //      return result._signal != null;
            //    }

            //  // fall through to x,y case

            //  case SwitchRef:
            //  case TrackRef:
            //    // case TriggerRef:
            //    // case ItineraryRef:

            //    if(n._txt) {
            //      // track or switch by name
            //      result._op = n._op;
            //      result._track = findStationNamed(n._txt);
            //      expr_buff + Globals.wxStrlen(expr_buff) = String.Format( wxPorting.T("Track(%s)"), n._txt);
            //      return result._track != null;
            //    }
            //    TraceCoord(n._x, n._y);
            //    if(!n._x && !n._y) {
            //      result._op = n._op;
            //      result._track = _track;
            //      return true;
            //    }
            //    t = find_track(layout, n._x, n._y);
            //    if(!t) {
            //      wxStrcat(expr_buff, wxPorting.T("=no track"));
            //      return false;
            //    }
            //    result._op = n._op;
            //    if(result._op == SignalRef && t.type == TSIGNAL)
            //      result._signal = (Signal)t;
            //    else
            //      result._track = t;
            //    return true;

            //  case TrainRef:

            //    result._op = TrainRef;
            //    if(!n._txt) {
            //      if(!n._x && !n._y) {
            //        result._train = _train;
            //      } else if(!(result._train = findTrain(n._x, n._y))) {
            //        expr_buff + Globals.wxStrlen(expr_buff) = String.Format( wxPorting.T("Train(%d,%d) - not found"), n._x, n._y);
            //        return false;
            //      }
            //      expr_buff + Globals.wxStrlen(expr_buff) = String.Format( wxPorting.T("Train{%s}"), result._train.name);
            //      return true;
            //    }
            //    result._train = findTrainNamed(n._txt);
            //    expr_buff + Globals.wxStrlen(expr_buff) = String.Format( wxPorting.T("Train(%s)"), n._txt);
            //    return result._train != null;

            //  case String:

            //    result._op = n._op;
            //    result._txt = n._txt;
            //    wxStrcat(expr_buff, result._txt);
            //    return true;

            //  case Number:

            //    result._op = n._op;
            //    result._txt = n._txt;
            //    result._val = n._val;
            //    expr_buff + Globals.wxStrlen(expr_buff) = String.Format( wxPorting.T("%d"), result._val);
            //    return true;

            //  case Random:

            //    result._op = Number;
            //    result._val = rand() % 100;
            //    return true;

            //  case Time:

            //    result._op = Number;
            //    result._val = ((current_time / 3600) % 24) * 100 + ((current_time / 60) % 60);
            //    return true;

            //  case Equal:

            //    result._op = Number;
            //    result._val = 0;
            //    if(_forCond) {

            //      // conditionals return false in case of expression error

            //      if(!Evaluate(n._left, left))
            //        return true;
            //      wxStrcat(expr_buff, wxPorting.T(" = "));
            //      if(!Evaluate(n._right, right))	    // virtual
            //        return true;

            //      val = 0;
            //      if(left._op == right._op) {
            //        switch(left._op) {
            //          case String:
            //            val = !wxStrcmp(left._txt, right._txt);
            //            break;

            //          case Number:
            //            val = left._val == right._val;
            //        }
            //      }
            //      result._op = Number;
            //      result._val = val;
            //      expr_buff + Globals.wxStrlen(expr_buff) = String.Format( wxPorting.T("{%d}"), val);
            //      return true;
            //    }
            //    oldForAddr = _forAddr;
            //    _forAddr = true;
            //    if(!Evaluate(n._left, result)) {
            //      _forAddr = oldForAddr;
            //      return false;
            //    }
            //    _forAddr = oldForAddr;
            //    if(result._txt)
            //      wxStrcat(expr_buff, result._txt);
            //    wxStrcat(expr_buff, wxPorting.T(" = "));
            //    if(!Evaluate(n._right, right))	    // virtual
            //      return false;
            //    switch(result._op) {

            //      case SignalRef:
            //        if(!result._signal)
            //          return false;
            //        result._signal.SetPropertyValue(result._txt, right);
            //        break;

            //      case TrackRef:
            //      case SwitchRef:
            //      case Addr:

            //        if(!result._track)
            //          return false;
            //        result._track.SetPropertyValue(result._txt, right);
            //        return true;

            //      case TrainRef:

            //        if(!result._train)
            //          return false;
            //        result._train.SetPropertyValue(result._txt, right);
            //        return false;

            //    }
            //    return true;

            //  case NotEqual:

            //    result._op = Number;
            //    result._val = 0;
            //    if(!Evaluate(n._left, left)) {
            //      result._val = 1;	// invalid expressions never match
            //      return true;
            //    }
            //    wxStrcat(expr_buff, wxPorting.T(" != "));
            //    if(!Evaluate(n._right, right))
            //      return true;
            //    val = 0;
            //    if(left._op == right._op) {
            //      switch(left._op) {
            //        case String:
            //          val = wxStrcmp(left._txt, right._txt) != 0;
            //          break;

            //        case Number:
            //          val = left._val != right._val;
            //      }
            //    }
            //    result._val = val;
            //    expr_buff + Globals.wxStrlen(expr_buff) = String.Format( wxPorting.T("{%d}"), val);
            //    return true;

            //  case Greater:

            //    // conditionals return false in case of expression error

            //    result._op = Number;
            //    result._val = 0;
            //    if(!Evaluate(n._left, left))
            //      return true;
            //    wxStrcat(expr_buff, wxPorting.T(" > "));
            //    if(!Evaluate(n._right, right))
            //      return true;
            //    val = 0;
            //    if(left._op == right._op) {
            //      switch(left._op) {
            //        case String:
            //          val = wxStrcmp(left._txt, right._txt) > 0;
            //          break;

            //        case Number:
            //          val = left._val > right._val;
            //      }
            //    }
            //    result._val = val;
            //    expr_buff + Globals.wxStrlen(expr_buff) = String.Format( wxPorting.T("{%d}"), val);
            //    return true;

            //  case Less:

            //    // conditionals return false in case of expression error

            //    result._op = Number;
            //    result._val = 0;
            //    if(!Evaluate(n._left, left))
            //      return true;
            //    wxStrcat(expr_buff, wxPorting.T(" < "));
            //    if(!Evaluate(n._right, right))
            //      return true;
            //    val = 0;
            //    if(left._op == right._op) {
            //      switch(left._op) {
            //        case String:
            //          val = wxStrcmp(left._txt, right._txt) < 0;
            //          break;

            //        case Number:
            //          val = left._val < right._val;
            //      }
            //    }
            //    result._val = val;
            //    expr_buff + Globals.wxStrlen(expr_buff) = String.Format( wxPorting.T("{%d}"), val);
            //    return true;

            //  case Or:

            //    result._op = Number;
            //    result._val = 0;
            //    if(Evaluate(n._left, right) && right._op == Number && right._val != 0) {
            //      result._val = 1;
            //      return true;
            //    }
            //    wxStrcat(expr_buff, wxPorting.T(" or "));
            //    // note: invalid expressions evaluate to false (0)
            //    if(Evaluate(n._right, right) && right._op == Number && right._val != 0)
            //      result._val = 1;
            //    else
            //      result._val = 0;
            //    return true;

            //  case And:

            //    result._op = Number;
            //    result._val = 0;
            //    if(Evaluate(n._left, right) && right._op == Number && right._val == 0)
            //      return true;
            //    wxStrcat(expr_buff, wxPorting.T(" and "));
            //    // note: invalid expressions evaluate to false (0)
            //    if(Evaluate(n._right, right) && right._op == Number && right._val == 0)
            //      return true;
            //    result._val = 1;
            //    return true;
            //}
            //return false;
        }
예제 #3
0
        ///
        ///	TRAIN  STATE
        ///


        public bool GetPropertyValue(String prop, ExprValue result)
        {
            throw new NotImplementedException();
            //if(!wxStrcmp(prop, wxPorting.T("name"))) {
            //  result._op = String;
            //  result._txt = this.name;
            //  return true;
            //}
            //if(!wxStrcmp(prop, wxPorting.T("type"))) {
            //  result._op = Number;
            //  result._val = this.type;
            //  return true;
            //}
            //if(!wxStrcmp(prop, wxPorting.T("speed"))) {
            //  result._op = Number;
            //  result._val = this.curspeed;
            //  return true;
            //}
            //if(!wxStrcmp(prop, wxPorting.T("length"))) {
            //  result._op = Number;
            //  result._val = this.length;
            //  return true;
            //}
            //if(!wxStrcmp(prop, wxPorting.T("arrived"))) {
            //  result._op = Number;
            //  result._val = this.status == train_ARRIVED;
            //  return true;
            //}
            //if(!wxStrcmp(prop, wxPorting.T("stopped"))) {
            //  result._op = Number;
            //  result._val = this.status == train_STOPPED;
            //  return true;
            //}
            //if(!wxStrcmp(prop, wxPorting.T("direction"))) {
            //  result._op = Number;
            //  result._val = this.direction;
            //  return true;
            //}
            //if(!wxStrcmp(prop, wxPorting.T("days"))) {
            //  result._op = Number;
            //  result._val = this.days;
            //  return true;
            //}
            //if(!wxStrcmp(prop, wxPorting.T("entry"))) {
            //  result._op = String;
            //  result._txt = this.entrance;
            //  return true;
            //}
            //if(!wxStrcmp(prop, wxPorting.T("exit"))) {
            //  result._op = String;
            //  result._txt = this.exit;
            //  return true;
            //}
            //if(!wxStrcmp(prop, wxPorting.T("nextStation"))) {
            //  TrainStop* stop = this.stops;
            //  while(stop && stop.stopped)
            //    stop = stop.next;
            //  if(!stop)
            //    return false;
            //  result._op = String;
            //  result._txt = stop.station;
            //  return true;
            //}
            //if(!wxStrcmp(prop, wxPorting.T("stock"))) {
            //  result._op = String;
            //  result._txt = this.stock;
            //  return true;
            //}
            //if(!wxStrcmp(prop, wxPorting.T("waitfor"))) {
            //  result._op = String;
            //  result._txt = this.waitfor;
            //  return true;
            //}
            //if(!wxStrcmp(prop, wxPorting.T("status"))) {
            //  result._op = String;
            //  switch(this.status) {
            //    case train_READY:
            //      result._txt = wxPorting.T("ready");
            //      break;
            //    case train_RUNNING:
            //      if(this.shunting)
            //        result._txt = wxPorting.T("shunting");
            //      else
            //        result._txt = wxPorting.T("running");
            //      break;
            //    case train_STOPPED:
            //      result._txt = wxPorting.T("stopped");
            //      break;
            //    case train_DELAY:
            //      result._txt = wxPorting.T("delayed");
            //      break;
            //    case train_WAITING:
            //      result._txt = wxPorting.T("waiting");
            //      break;
            //    case train_DERAILED:
            //      result._txt = wxPorting.T("derailed");
            //      break;
            //    case train_ARRIVED:
            //      result._txt = wxPorting.T("arrived");
            //      break;
            //  }
            //  return true;
            //}
            //return false;
        }