]> Dogcows Code - chaz/openbox/commitdiff
removed LinkedLists in BaseDisplay and Image. Only 1 left in BaseDisplay now
authorDana Jansens <danakj@orodu.net>
Sun, 12 May 2002 21:46:02 +0000 (21:46 +0000)
committerDana Jansens <danakj@orodu.net>
Sun, 12 May 2002 21:46:02 +0000 (21:46 +0000)
src/BaseDisplay.cc
src/BaseDisplay.h
src/Image.cc
src/Image.h

index f2ac4c7948222d81d3732b15c3901e0c02a99b31..37ef43483599be8ac0d187b595eb108b96b4de1b 100644 (file)
@@ -91,6 +91,8 @@
 #include "LinkedList.h"
 #include "Timer.h"
 
+#include <algorithm>
+
 // 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<BTimer>;
 
-  screenInfoList = new LinkedList<ScreenInfo>;
-  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())
index 1a44dddc6661e1cb25ad98bb41eef206f89c25d9..9386a261413847edb69354aac5951ecf9daf4148 100644 (file)
@@ -33,6 +33,8 @@ class ScreenInfo;
 #include "LinkedList.h"
 #include "Timer.h"
 #include "Geometry.h"
+#include "Util.h"
+#include <vector>
 
 #define AttribShaded      (1l << 0)
 #define AttribMaxHoriz    (1l << 1)
@@ -127,7 +129,10 @@ private:
 
   Bool _startup, _shutdown;
   Display *display;
-  LinkedList<ScreenInfo> *screenInfoList;
+
+  typedef std::vector<ScreenInfo*> ScreenInfoList;
+  ScreenInfoList screenInfoList;
   LinkedList<BTimer> *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; }
index cd702f6fe2195e805529bdffd9ea6cc16e4f6ed2..884d235f601581f9c3c82b1b39db2a37d9075be4 100644 (file)
@@ -2057,8 +2057,6 @@ BImageControl::BImageControl(BaseDisplay &dpy, ScreenInfo &scrn, Bool _dither,
            getVisual()->c_class);
     exit(1);
   }
-
-  cache = new LinkedList<Cache>;
 }
 
 
@@ -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<Cache> 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<Cache> 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<Cache> 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;
-    }
+    } 
   }
 }
index b21535bcf547704fc5cc67b13912cf222305e1bf..5a542c1691f5fe4570bb48bedc19514664820ee1 100644 (file)
@@ -26,8 +26,8 @@
 #include <X11/Xlib.h>
 #include <X11/Xutil.h>
 
-#include "LinkedList.h"
 #include "Timer.h"
+#include <list>
 
 class ScreenInfo;
 class BImage;
@@ -186,7 +186,8 @@ private:
     unsigned long pixel1, pixel2, texture;
   } Cache;
 
-  LinkedList<Cache> *cache;
+  typedef std::list<Cache*> CacheList;
+  CacheList cache;
 
 
 protected:
This page took 0.029967 seconds and 4 git commands to generate.