I attach a small patch to insets/figinset.C. It just uses
std::vector<Figref *> instead of Figref** and similar
std::vector<figdata *> instead of figdata** and removes about 70
lines of 'not so C++ish' code. 

Andre'

---------------------------- snip ---------------------------------

Index: src/insets/figinset.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/figinset.C,v
retrieving revision 1.50
diff -u -r1.50 figinset.C
--- src/insets/figinset.C       2000/03/09 23:58:54     1.50
+++ src/insets/figinset.C       2000/03/10 20:48:20
@@ -2,8 +2,6 @@
  *     figinset.C - part of LyX project
  */
 
-extern long int background_pixels;
-
 /*  Rework of path-handling (Matthias 04.07.1996 )
  * ------------------------------------------------
  *   figinsets keep an absolute path to the eps-file.
@@ -42,12 +40,14 @@
 #include <queue>
 #include <list>
 #include <algorithm>
+#include <vector>
 using std::ofstream;
 using std::ifstream;
 using std::queue;
 using std::list;
 using std::find;
 using std::flush;
+using std::vector;
 
 #include "figinset.h"
 #include "lyx.h"
@@ -74,12 +74,6 @@
 extern void AllowInput();
 
 static float const DEG2PI = 57.295779513;
-static int const figallocchunk = 32;
-
-static int figinsref = 0;      /* number of figures */
-static int figarrsize = 0;     /* current max number of figures */
-static int bmpinsref = 0;      /* number of bitmaps */
-static int bmparrsize = 0;     /* current max number of bitmaps */
 
 struct queue_element {
        float rx, ry;          // resolution x and y
@@ -89,8 +83,10 @@
 
 static int const MAXGS = 3;                    /* maximum 3 gs's at a time */
 
-static Figref ** figures;      /* all the figures */
-static figdata ** bitmaps;     /* all the bitmaps */
+typedef vector<Figref *>  figures_type;
+typedef vector<figdata *> bitmaps_type;
+static figures_type figures;      // all figures 
+static bitmaps_type bitmaps;      // all bitmaps
 
 static queue<queue_element> gsqueue; // queue for ghostscripting
 
@@ -161,7 +157,7 @@
 
        // just kill gs, that way it will work for sure
        // This loop looks like S**T so it probably is...
-       for (int i = 0; i < bmpinsref; ++i)
+       for (unsigned int i = 0; i < bitmaps.size(); ++i)
                if ((long)bitmaps[i]->bitmap == (long)e->data.l[1]) {
                        // found the one
                        figdata * p = bitmaps[i];
@@ -384,11 +380,8 @@
 
 void InitFigures()
 {
-       bmparrsize = figarrsize = figallocchunk;
-       typedef Figref * Figref_p;
-       figures = new Figref_p[figallocchunk];
-       typedef figdata * figdata_p;
-       bitmaps = new figdata_p[figallocchunk];
+       figures = figures_type();
+       bitmaps = bitmaps_type();
 
        unsigned int k;
        for (unsigned int i = 0; i < 256; ++i) {
@@ -433,29 +426,12 @@
 
 void DoneFigures()
 {
-       delete[] figures;
-       delete[] bitmaps;
-       figarrsize = 0;
-       bmparrsize = 0;
-
        lyxerr.debug() << "Unregistering figures..." << endl;
 
        fl_remove_canvas_handler(figinset_canvas, ClientMessage,
                                 GhostscriptMsg);
 }
 
-
-int FindBmpIndex(figdata * tmpdata)
-{
-       int i = 0;
-       while (i < bmpinsref) {
-               if (bitmaps[i] == tmpdata) return i;
-               ++i;
-       }
-       return i;
-}
-
-
 static
 void freefigdata(figdata * tmpdata)
 {
@@ -473,13 +449,8 @@
        }
 
        if (tmpdata->bitmap) XFreePixmap(fl_display, tmpdata->bitmap);
+       bitmaps.erase(find(bitmaps.begin(), bitmaps.end(), tmpdata));
        delete tmpdata;
-       int i = FindBmpIndex(tmpdata);
-       --bmpinsref;
-       while (i < bmpinsref) {
-               bitmaps[i] = bitmaps[i + 1];
-               ++i;
-       }
 }
 
 
@@ -728,30 +699,16 @@
 
        if (fname.empty()) return 0;
 
-       int i = 0;
-       while (i < bmpinsref) {
+       for (unsigned int i = 0; i < bitmaps.size(); ++i) {
                if (bitmaps[i]->wid == wid && bitmaps[i]->hgh == hgh &&
                    bitmaps[i]->flags == flags && bitmaps[i]->fname == fname &&
                    bitmaps[i]->angle == angle) {
                        bitmaps[i]->ref++;
                        return bitmaps[i];
                }
-               ++i;
        }
        /* not found -> create new record or return 0 if no record */
-       ++bmpinsref;
-       if (bmpinsref > bmparrsize) {
-               // allocate more space
-               bmparrsize += figallocchunk;
-               typedef figdata * figdata_p;
-               figdata ** tmp = new figdata_p[bmparrsize];
-               memcpy(tmp, bitmaps,
-                      sizeof(figdata*) * (bmparrsize - figallocchunk));
-               delete[] bitmaps;
-               bitmaps = tmp;
-       }
        figdata * p = new figdata;
-       bitmaps[bmpinsref-1] = p;
        p->wid = wid;
        p->hgh = hgh;
        p->raw_wid = raw_wid;
@@ -759,6 +716,7 @@
        p->angle = angle;
        p->fname = fname;
        p->flags = flags;
+       bitmaps.push_back(p);
        XWindowAttributes wa;
        XGetWindowAttributes(fl_display, fl_get_canvas_id(
                figinset_canvas), &wa);
@@ -801,7 +759,7 @@
 static
 void makeupdatelist(figdata * p)
 {
-       for (int i = 0; i < figinsref; ++i)
+       for (int i = 0; i < figures.size(); ++i)
                if (figures[i]->data == p) {
                        if (lyxerr.debugging()) {
                                lyxerr << "Updating inset "
@@ -818,7 +776,7 @@
 {
        lyxerr.debug() << "Got pid = " << pid << endl;
        bool pid_handled = false;
-       for (int i = bmpinsref - 1; i >= 0; --i) {
+       for (int i = bitmaps.size() - 1; i >= 0; --i) {
                if (bitmaps[i]->reading && pid == bitmaps[i]->gspid) {
                        lyxerr.debug() << "Found pid in bitmaps" << endl;
                        // now read the file and remove it from disk
@@ -900,7 +858,7 @@
 void getbitmaps()
 {
        bitmap_waiting = false;
-       for (int i = 0; i < bmpinsref; ++i)
+       for (unsigned int i = 0; i < bitmaps.size(); ++i)
                if (bitmaps[i]->gspid > 0 && !bitmaps[i]->reading)
                        getbitmap(bitmaps[i]);
 }
@@ -909,23 +867,12 @@
 static
 void RegisterFigure(InsetFig * fi)
 {
-       if (figinsref == 0) InitFigures();
+       if (figures.size() == 0) InitFigures();
        fi->form = 0;
-       ++figinsref;
-       if (figinsref > figarrsize) {
-               // allocate more space
-               figarrsize += figallocchunk;
-               typedef Figref * Figref_p;
-               Figref ** tmp = new Figref_p[figarrsize];
-               memcpy(tmp, figures,
-                      sizeof(Figref*) * (figarrsize-figallocchunk));
-               delete[] figures;
-               figures = tmp;
-       }
        Figref * tmpfig = new Figref;
        tmpfig->data = 0;
        tmpfig->inset = fi;
-       figures[figinsref-1] = tmpfig;
+       figures.push_back(tmpfig);
        fi->figure = tmpfig;
 
        if (lyxerr.debugging()) {
@@ -935,17 +882,6 @@
 }
 
 
-int FindFigIndex(Figref * tmpfig)
-{
-       int i = 0;
-       while (i < figinsref) {
-               if (figures[i] == tmpfig) return i;
-               ++i;
-       }
-       return i;
-}
-
-
 static
 void UnregisterFigure(InsetFig * fi)
 {
@@ -965,16 +901,11 @@
                free(tmpfig->inset->form); // Why free?
                tmpfig->inset->form = 0;
 #endif
-       }
-       int i = FindFigIndex(tmpfig);
-       --figinsref;
-       while (i < figinsref) {
-               figures[i] = figures[i+1];
-               ++i;
        }
+       figures.erase(find(figures.begin(), figures.end(), tmpfig));
        delete tmpfig;
 
-       if (figinsref == 0) DoneFigures();
+       if (figures.size() == 0) DoneFigures();
 }
 
 
@@ -2146,7 +2077,7 @@
        }
 
        /* find inset we were reacting to */
-       for (int i = 0; i < figinsref; ++i)
+       for (unsigned int i = 0; i < figures.size(); ++i)
                if (figures[i]->inset->form && figures[i]->inset->form->Figure
                    == obj->form) {
            
@@ -2161,7 +2092,7 @@
 
 void HideFiguresPopups()
 {
-       for (int i = 0; i < figinsref; ++i)
+       for (unsigned int i = 0; i < figures.size(); ++i)
                if (figures[i]->inset->form 
                    && figures[i]->inset->form->Figure->visible) {
                        if (lyxerr.debugging()) {
---------------------------- snip ---------------------------------


-- 
It'll take a long time to eat 63.000 peanuts.
André Pönitz ......................... [EMAIL PROTECTED]

Reply via email to