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; }
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; }
/// /// 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; }