From d58f7b569e6c39fbeb96d55a139cd3a07ec3b5a7 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sun, 12 May 2002 22:40:32 +0000 Subject: [PATCH] no more use of LinkedList in BaseDisplay --- src/BaseDisplay.cc | 42 +++++++++++++++++++++++------------------- src/BaseDisplay.h | 5 +++-- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/src/BaseDisplay.cc b/src/BaseDisplay.cc index 37ef4348..901efea4 100644 --- a/src/BaseDisplay.cc +++ b/src/BaseDisplay.cc @@ -338,8 +338,6 @@ BaseDisplay::BaseDisplay(const char *app_name, char *dpy_name) { XSetErrorHandler((XErrorHandler) handleXErrors); - timerList = new LinkedList; - screenInfoList.reserve(ScreenCount(display)); for (int i = 0; i < number_of_screens; i++) screenInfoList.push_back(new ScreenInfo(*this, i)); @@ -392,12 +390,7 @@ BaseDisplay::BaseDisplay(const char *app_name, char *dpy_name) { BaseDisplay::~BaseDisplay(void) { std::for_each(screenInfoList.begin(), screenInfoList.end(), PointerAssassin()); - // we don't create the BTimers, we don't delete them - while (timerList->count()) - timerList->remove(0); - - delete timerList; if (application_name != NULL) delete [] application_name; @@ -434,12 +427,13 @@ void BaseDisplay::eventLoop(void) { FD_ZERO(&rfds); FD_SET(xfd, &rfds); - if (timerList->count()) { + if (!timerList.empty()) { gettimeofday(&now, 0); tm.tv_sec = tm.tv_usec = 0l; - BTimer *timer = timerList->first(); + BTimer *timer = timerList.front(); + ASSERT(timer != NULL); tm.tv_sec = timer->getStartTime().tv_sec + timer->getTimeout().tv_sec - now.tv_sec; @@ -469,8 +463,11 @@ void BaseDisplay::eventLoop(void) { // check for timer timeout gettimeofday(&now, 0); - LinkedListIterator it(timerList); - for(BTimer *timer = it.current(); timer; it++, timer = it.current()) { + TimerList::iterator it; + for (it = timerList.begin(); it != timerList.end(); ) { + BTimer *timer = *it; + ++it; // the timer may be removed from the list, so move ahead now + ASSERT(timer != NULL); tm.tv_sec = timer->getStartTime().tv_sec + timer->getTimeout().tv_sec; tm.tv_usec = timer->getStartTime().tv_usec + @@ -483,8 +480,12 @@ void BaseDisplay::eventLoop(void) { timer->fireTimeout(); // restart the current timer so that the start time is updated - if (! timer->doOnce()) timer->start(); - else timer->stop(); + if (! timer->doOnce()) + timer->start(); + else { + timer->stop(); +// delete timer; // USE THIS? + } } } } @@ -518,22 +519,25 @@ void BaseDisplay::ungrab(void) { void BaseDisplay::addTimer(BTimer *timer) { - if (! timer) return; + ASSERT(timer != (BTimer *) 0); + printf("ADDING TIMER\n"); - LinkedListIterator it(timerList); - int index = 0; - for (BTimer *tmp = it.current(); tmp; it++, index++, tmp = it.current()) + TimerList::iterator it; + for (it = timerList.begin(); it != timerList.end(); ++it) { + BTimer *tmp = *it; if ((tmp->getTimeout().tv_sec > timer->getTimeout().tv_sec) || ((tmp->getTimeout().tv_sec == timer->getTimeout().tv_sec) && (tmp->getTimeout().tv_usec >= timer->getTimeout().tv_usec))) break; + } - timerList->insert(timer, index); + timerList.insert(it, timer); } void BaseDisplay::removeTimer(BTimer *timer) { - timerList->remove(timer); + printf("REMOVING TIMER\n"); + timerList.remove(timer); } diff --git a/src/BaseDisplay.h b/src/BaseDisplay.h index 9386a261..b30a7170 100644 --- a/src/BaseDisplay.h +++ b/src/BaseDisplay.h @@ -30,11 +30,11 @@ class BaseDisplay; class ScreenInfo; -#include "LinkedList.h" #include "Timer.h" #include "Geometry.h" #include "Util.h" #include +#include #define AttribShaded (1l << 0) #define AttribMaxHoriz (1l << 1) @@ -133,7 +133,8 @@ private: typedef std::vector ScreenInfoList; ScreenInfoList screenInfoList; - LinkedList *timerList; + typedef std::list TimerList; + TimerList timerList; char *display_name, *application_name; int number_of_screens, server_grabs, colors_per_channel; -- 2.45.2