[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