From eb8a11a5a7b066ada63cc3550f8314f53eaf1a39 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sun, 12 May 2002 21:46:02 +0000 Subject: [PATCH] removed LinkedLists in BaseDisplay and Image. Only 1 left in BaseDisplay now --- src/BaseDisplay.cc | 20 +++++++------------ src/BaseDisplay.h | 13 +++++++++--- src/Image.cc | 50 +++++++++++++++++++++++----------------------- src/Image.h | 5 +++-- 4 files changed, 45 insertions(+), 43 deletions(-) diff --git a/src/BaseDisplay.cc b/src/BaseDisplay.cc index f2ac4c79..37ef4348 100644 --- a/src/BaseDisplay.cc +++ b/src/BaseDisplay.cc @@ -91,6 +91,8 @@ #include "LinkedList.h" #include "Timer.h" +#include + // X error handler to handle any and all X errors while the application is // running static Bool internal_error = False; @@ -338,11 +340,9 @@ BaseDisplay::BaseDisplay(const char *app_name, char *dpy_name) { timerList = new LinkedList; - screenInfoList = new LinkedList; - for (int i = 0; i < number_of_screens; i++) { - ScreenInfo *screeninfo = new ScreenInfo(*this, i); - screenInfoList->insert(screeninfo); - } + screenInfoList.reserve(ScreenCount(display)); + for (int i = 0; i < number_of_screens; i++) + screenInfoList.push_back(new ScreenInfo(*this, i)); #ifndef NOCLOBBER NumLockMask = ScrollLockMask = 0; @@ -390,14 +390,8 @@ BaseDisplay::BaseDisplay(const char *app_name, char *dpy_name) { BaseDisplay::~BaseDisplay(void) { - while (screenInfoList->count()) { - ScreenInfo *si = screenInfoList->first(); - - screenInfoList->remove(si); - delete si; - } - - delete screenInfoList; + std::for_each(screenInfoList.begin(), screenInfoList.end(), + PointerAssassin()); // we don't create the BTimers, we don't delete them while (timerList->count()) diff --git a/src/BaseDisplay.h b/src/BaseDisplay.h index 1a44dddc..9386a261 100644 --- a/src/BaseDisplay.h +++ b/src/BaseDisplay.h @@ -33,6 +33,8 @@ class ScreenInfo; #include "LinkedList.h" #include "Timer.h" #include "Geometry.h" +#include "Util.h" +#include #define AttribShaded (1l << 0) #define AttribMaxHoriz (1l << 1) @@ -127,7 +129,10 @@ private: Bool _startup, _shutdown; Display *display; - LinkedList *screenInfoList; + + typedef std::vector ScreenInfoList; + ScreenInfoList screenInfoList; + LinkedList *timerList; char *display_name, *application_name; @@ -270,8 +275,10 @@ public: #endif // NEWWMSPEC - inline ScreenInfo *getScreenInfo(int s) - { return (ScreenInfo *) screenInfoList->find(s); } + inline ScreenInfo *getScreenInfo(int s) { + ASSERT(s < screenInfoList.size()); + return screenInfoList[s]; + } inline const Bool &hasShapeExtensions(void) const { return shape.extensions; } diff --git a/src/Image.cc b/src/Image.cc index cd702f6f..884d235f 100644 --- a/src/Image.cc +++ b/src/Image.cc @@ -2057,8 +2057,6 @@ BImageControl::BImageControl(BaseDisplay &dpy, ScreenInfo &scrn, Bool _dither, getVisual()->c_class); exit(1); } - - cache = new LinkedList; } @@ -2087,16 +2085,16 @@ BImageControl::~BImageControl(void) { delete [] colors; } - if (cache->count()) { - int i, n = cache->count(); + if (!cache.empty()) { + int i, n = cache.size(); fprintf(stderr, i18n->getMessage(ImageSet, ImagePixmapRelease, "BImageContol::~BImageControl: pixmap cache - " "releasing %d pixmaps\n"), n); for (i = 0; i < n; i++) { - Cache *tmp = cache->first(); + Cache *tmp = cache.front(); XFreePixmap(basedisplay.getXDisplay(), tmp->pixmap); - cache->remove(tmp); + cache.remove(tmp); delete tmp; } @@ -2107,30 +2105,29 @@ BImageControl::~BImageControl(void) { } #endif // TIMEDCACHE } - - delete cache; } Pixmap BImageControl::searchCache(unsigned int width, unsigned int height, unsigned long texture, BColor *c1, BColor *c2) { - if (cache->count()) { - LinkedListIterator it(cache); + if (!cache.empty()) { - for (Cache *tmp = it.current(); tmp; it++, tmp = it.current()) { + CacheList::iterator it; + for (it = cache.begin(); it != cache.end(); ++it) { + Cache *tmp = *it; if ((tmp->width == width) && (tmp->height == height) && (tmp->texture == texture) && (tmp->pixel1 == c1->getPixel())) - if (texture & BImage_Gradient) { - if (tmp->pixel2 == c2->getPixel()) { - tmp->count++; - return tmp->pixmap; - } - } else { + if (texture & BImage_Gradient) { + if (tmp->pixel2 == c2->getPixel()) { tmp->count++; return tmp->pixmap; } + } else { + tmp->count++; + return tmp->pixmap; } + } } return None; @@ -2163,9 +2160,9 @@ Pixmap BImageControl::renderImage(unsigned int width, unsigned int height, else tmp->pixel2 = 0l; - cache->insert(tmp); + cache.push_back(tmp); - if ((unsigned) cache->count() > cache_max) { + if ((unsigned) cache.size() > cache_max) { #ifdef DEBUG fprintf(stderr, i18n->getMessage(ImageSet, ImagePixmapCacheLarge, "BImageControl::renderImage: cache is large, " @@ -2184,8 +2181,9 @@ Pixmap BImageControl::renderImage(unsigned int width, unsigned int height, void BImageControl::removeImage(Pixmap pixmap) { if (pixmap) { - LinkedListIterator it(cache); - for (Cache *tmp = it.current(); tmp; it++, tmp = it.current()) { + CacheList::iterator it; + for (it = cache.begin(); it != cache.end(); ++it) { + Cache *tmp = *it; if (tmp->pixmap == pixmap) { if (tmp->count) { tmp->count--; @@ -2434,12 +2432,14 @@ void BImageControl::parseColor(BColor *color, const char *c) { void BImageControl::timeout(void) { - LinkedListIterator it(cache); - for (Cache *tmp = it.current(); tmp; it++, tmp = it.current()) { + CacheList::iterator it; + for (it = cache.begin(); it != cache.end(); ) { + Cache *tmp = *it; + ++it; // move on to the next item before this one is removed if (tmp->count <= 0) { XFreePixmap(basedisplay.getXDisplay(), tmp->pixmap); - cache->remove(tmp); + cache.remove(tmp); delete tmp; - } + } } } diff --git a/src/Image.h b/src/Image.h index b21535bc..5a542c16 100644 --- a/src/Image.h +++ b/src/Image.h @@ -26,8 +26,8 @@ #include #include -#include "LinkedList.h" #include "Timer.h" +#include class ScreenInfo; class BImage; @@ -186,7 +186,8 @@ private: unsigned long pixel1, pixel2, texture; } Cache; - LinkedList *cache; + typedef std::list CacheList; + CacheList cache; protected: -- 2.45.2