void TuringMachine::resize(char dir){ int position = resizeStrip(dir, head); if (dir == 'L') head = &getStrip()[position + MIN]; if (dir == 'R') head = &getStrip()[position]; }
TuringMachine::TuringMachine(TuringMachine& T): Strip(T), deltaFunction(T){ bool done = false; for (int i = 0; i <= strlen(getStrip()) && !done; i++) if (getStrip()[i] != ' '){ head = &getStrip()[i]; done = true; } }
TuringMachine::TuringMachine(char* _states, char _start, char _haltTrue, char _haltFalse, char** _transitions, char* _strip) :deltaFunction(_states, _start, _haltTrue, _haltFalse, _transitions), Strip(_strip){ bool done = false; for (int i = 0; i <= strlen(getStrip()) && !done; i++) if (getStrip()[i] != ' '){ head = &getStrip()[i]; done = true; } }
TuringMachine& TuringMachine::operator()(TuringMachine& T){ T.startMachine(); bool done = false; setStrip(T.getStrip()); for (int i = 0; i < strlen(getStrip()) + 1 && !done; i++) if (getStrip()[i] != ' '){ head = &getStrip()[i]; done = true; } startMachine(); return *this; }
void TuringMachine::move(char dir){ if (dir == 'R'){ if (head == &getStrip()[strlen(getStrip()) - 1]) resize(dir); head += 1; } if (dir == 'L'){ if (head == &getStrip()[0]) resize(dir); head -= 1; } }
bool MSLane::push(MSVehicle* veh, const std::vector<int> &stripID, bool hasMainStrip) { //assert (veh->getStrips().size() != 0); MSVehicle::StripCont strips; // Insert vehicle only if it's destination isn't reached. // and it does not collide with previous // check whether the vehicle has ended his route // Add to mean data (edge/lane state dump) if (! veh->moveRoutePointer(myEdge)) { // adjusts vehicles routeIterator for (int i=0; i<stripID.size(); ++i) { MSStrip *strip = getStrip(stripID[i]); strip->push(veh); strips.push_back(strip); } veh->enterLaneAtMove(this, SPEED2DIST(veh->getSpeed()) - veh->getPositionOnLane(), strips, hasMainStrip); SUMOReal pspeed = veh->getSpeed(); SUMOReal oldPos = veh->getPositionOnLane() - SPEED2DIST(veh->getSpeed()); veh->workOnMoveReminders(oldPos, veh->getPositionOnLane(), pspeed); return false; } else { if (hasMainStrip) { veh->enterLaneAtMove(this, SPEED2DIST(veh->getSpeed()) - veh->getPositionOnLane(), strips, hasMainStrip); veh->onRemovalFromNet(false); MSNet::getInstance()->getVehicleControl().scheduleVehicleRemoval(veh); } return true; } }
TuringMachine& TuringMachine::operator()(TuringMachine& T, TuringMachine& F){ bool done = false; startMachine(); if (&getCurrent() != &getHaltTrue()){ done = false; T.setStrip(getStrip()); for (int i = 0; i < strlen(T.getStrip()) + 1 && !done; i++) if (getStrip()[i] != ' '){ T.head = &getStrip()[i]; done = true; } T.startMachine(); return T; } if (&getCurrent() != &getHaltFalse()){ done = false; F.setStrip(getStrip()); for (int i = 0; i < strlen(F.getStrip()) + 1 && !done; i++) if (getStrip()[i] != ' '){ F.head = &getStrip()[i]; done = true; } F.startMachine(); return F; } }