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;
	}
}
Example #6
0
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;
	}
}