コード例 #1
0
	bool SpaceInvadersModel::registerObserver(Observer* obs) {
		//Check if already registered
		if (findObserver(obs) != observers_.end())
			return false;
		//If not, register
		observers_.push_back(obs);
		return true;
	}
コード例 #2
0
	bool SpaceInvadersModel::unregisterObserver(Observer* obs) {
		//Find observer to unregister
		std::vector<Observer*>::iterator pos = findObserver(obs);
		if (pos == observers_.end())
			return false;
		//Unregister if found
		observers_.erase(pos);
		return true;
	}
コード例 #3
0
LocalMapState* Entity::getLocalMap(){


	Observer* o = findObserver(0);
	if (o){

		return (LocalMapState*)(o);
	}

	return NULL;
}
コード例 #4
0
ファイル: TickHandler.cpp プロジェクト: EVTV/GEVCU
/**
 * Register an observer to be triggered in a certain interval.
 * TickObservers with the same interval are grouped to one timer to save timers.
 * A TickObserver may be registered multiple times with different intervals.
 *
 * First a timer with the same interval is looked up. If none found, a free one is
 * used. Then a free TickObserver slot (of max CFG_MAX_TICK_OBSERVERS) is looked up. If all went
 * well, the timer is configured and (re)started.
 */
void TickHandler::attach(TickObserver* observer, uint32_t interval) {
	int timer = findTimer(interval);
	if (timer == -1) {
		timer = findTimer(0);	// no timer with given tick interval exist -> look for unused (interval == 0)
		if (timer == -1) {
			Logger::error("No free timer available for interval=%d", interval);
			return;
		}
		timerEntry[timer].interval = interval;
	}

	int observerIndex = findObserver(timer, 0);
	if (observerIndex == -1) {
		Logger::error("No free observer slot for timer %d with interval %d", timer, timerEntry[timer].interval);
		return;
	}
	timerEntry[timer].observer[observerIndex] = observer;
	Logger::debug("attached TickObserver (%X) as number %d to timer %d, %dus interval", observer, observerIndex, timer, interval);

	switch (timer) { // restarting a timer which would already be running is no problem (see DueTimer.cpp)
	case 0:
		Timer0.setPeriod(interval).attachInterrupt(timer0Interrupt).start();
		break;
	case 1:
		Timer1.setPeriod(interval).attachInterrupt(timer1Interrupt).start();
		break;
	case 2:
		Timer2.setPeriod(interval).attachInterrupt(timer2Interrupt).start();
		break;
	case 3:
		Timer3.setPeriod(interval).attachInterrupt(timer3Interrupt).start();
		break;
	case 4:
		Timer4.setPeriod(interval).attachInterrupt(timer4Interrupt).start();
		break;
	case 5:
		Timer5.setPeriod(interval).attachInterrupt(timer5Interrupt).start();
		break;
	case 6:
		Timer6.setPeriod(interval).attachInterrupt(timer6Interrupt).start();
		break;
	case 7:
		Timer7.setPeriod(interval).attachInterrupt(timer7Interrupt).start();
		break;
	case 8:
		Timer8.setPeriod(interval).attachInterrupt(timer8Interrupt).start();
		break;
	}
}