[PD-cvs] externals/nusmuk msd.h,1.1,1.2

Thomas Grill xovo at users.sourceforge.net
Tue May 3 00:07:21 CEST 2005


Update of /cvsroot/pure-data/externals/nusmuk
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26016

Modified Files:
	msd.h 
Log Message:
use index bit-reversal to pseudo-balance the map tree

Index: msd.h
===================================================================
RCS file: /cvsroot/pure-data/externals/nusmuk/msd.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** msd.h	2 May 2005 15:39:24 -0000	1.1
--- msd.h	2 May 2005 22:07:18 -0000	1.2
***************
*** 216,224 ****
  
  template <typename T>
  class IndexMap
! 	: public TablePtrMap<int,T,16>
  {
  public:
! 	typedef TablePtrMap<int,T,16> Parent;
  	
      virtual ~IndexMap() { reset(); }
--- 216,233 ----
  
  template <typename T>
+ inline T bitrev(T k) 
+ {
+ 	T r = 0;
+ 	for(int i = 0; i < sizeof(k)*4; ++i) r = (r<<1)|(k&1),k >>= 1;
+ 	return r;
+ }
+ 
+ // use bit-reversed key to pseudo-balance the map tree
+ template <typename T>
  class IndexMap
! 	: TablePtrMap<unsigned int,T,16>
  {
  public:
! 	typedef TablePtrMap<unsigned int,T,16> Parent;
  	
      virtual ~IndexMap() { reset(); }
***************
*** 230,234 ****
--- 239,259 ----
  		Parent::clear(); 
  	}
+ 	
+ 	inline size_t size() const { return Parent::size(); }
  
+ 	inline T insert(unsigned int k,T v) { return Parent::insert(bitrev(k),v); }	
+ 
+ 	inline T find(unsigned int k) { return Parent::find(bitrev(k)); }
+ 
+ 	inline T remove(unsigned int k) { return Parent::remove(bitrev(k)); }
+ 	
+ 	class iterator
+ 		: public Parent::iterator
+ 	{
+ 	public:
+ 		iterator() {}
+ 		iterator(IndexMap &m): Parent::iterator(m) {}
+ 		inline unsigned int key() const { return bitrev(Parent::key()); }
+ 	};
  };
  
***************
*** 322,326 ****
  	
  	t_float limit[N][2];			// Limit values
! 	int id_mass, id_link;
  
  // ---------------------------------------------------------------  RESET 
--- 347,351 ----
  	
  	t_float limit[N][2];			// Limit values
! 	unsigned int id_mass, id_link;
  
  // ---------------------------------------------------------------  RESET 





More information about the Pd-cvs mailing list