[PD-cvs] pd/src desire.c,1.1.2.217.2.220,1.1.2.217.2.221
Mathieu Bouchard
matju at users.sourceforge.net
Sat Aug 18 04:59:44 CEST 2007
Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25918
Modified Files:
Tag: desiredata
desire.c
Log Message:
maintain a std::map in parallel to boxes->list
Index: desire.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/Attic/desire.c,v
retrieving revision 1.1.2.217.2.220
retrieving revision 1.1.2.217.2.221
diff -C2 -d -r1.1.2.217.2.220 -r1.1.2.217.2.221
*** desire.c 18 Aug 2007 02:26:25 -0000 1.1.2.217.2.220
--- desire.c 18 Aug 2007 02:59:39 -0000 1.1.2.217.2.221
***************
*** 80,91 ****
struct t_boxes : t_gobj {
private:
t_gobj *list;
! std::map<int,t_gobj *> future_use;
public:
t_boxes() : list(0) {}
size_t size() {
size_t n=0;
boxes_each(g,this) n++;
return n;
}
--- 80,94 ----
struct t_boxes : t_gobj {
+ typedef std::pair<int,t_gobj *> KV;
private:
t_gobj *list;
! std::map<int,t_gobj *> map;
public:
+ void invariant () {size();}
t_boxes() : list(0) {}
size_t size() {
size_t n=0;
boxes_each(g,this) n++;
+ //post("map size=%d list size=%d",map.size(),n);
return n;
}
***************
*** 98,109 ****
}
t_gobj *next(t_gobj *x) {return x->g_next;}
! void add(t_gobj *x) { /* will rely on x->index in the future */
t_gobj *r = last();
if (r) r->g_next = x; else list = x;
x->g_next = 0;
}
void remove_by_value(t_gobj *x) {
if (list == x) list = x->next();
else boxes_each(g,this) if (g->next() == x) {g->g_next = x->next(); break;}
}
};
--- 101,115 ----
}
t_gobj *next(t_gobj *x) {return x->g_next;}
! void add(t_gobj *x) { /* the key is x->index, the value is x */
t_gobj *r = last();
if (r) r->g_next = x; else list = x;
x->g_next = 0;
+ map.insert(KV(x->dix->index,x));
+ invariant();
}
void remove_by_value(t_gobj *x) {
if (list == x) list = x->next();
else boxes_each(g,this) if (g->next() == x) {g->g_next = x->next(); break;}
+ invariant();
}
};
***************
*** 2025,2029 ****
void canvas_add(t_canvas *x, t_gobj *y) {
gobj_setcanvas(y,x);
- y->g_next = 0;
y->dix->index = x->next_o_index++;
x->boxes->add(y);
--- 2031,2034 ----
More information about the Pd-cvs
mailing list