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]