[PD-cvs] externals/grill/pool/source data.cpp,1.3,1.4 main.cpp,1.5,1.6 pool.cpp,1.8,1.9 pool.h,1.6,1.7

Thomas Grill xovo at users.sourceforge.net
Sat Oct 30 05:59:03 CEST 2004


Update of /cvsroot/pure-data/externals/grill/pool/source
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30698/source

Modified Files:
	data.cpp main.cpp pool.cpp pool.h 
Log Message:
better symbol handling
added seti, clri
name changes for svn repository
more inlined functions


Index: data.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/pool/source/data.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** data.cpp	10 Aug 2004 20:23:27 -0000	1.3
--- data.cpp	30 Oct 2004 03:58:58 -0000	1.4
***************
*** 33,37 ****
  const A pooldata::nullatom = { A_NULL };
  
! 
  V pooldata::Reset()
  {
--- 33,37 ----
  const A pooldata::nullatom = { A_NULL };
  
! /*
  V pooldata::Reset()
  {
***************
*** 45,48 ****
--- 45,49 ----
  }
  
+ 
  BL pooldata::ChkDir(const AtomList &d)
  {
***************
*** 71,74 ****
--- 72,83 ----
  }
  
+ V pooldata::Clri(const AtomList &d,I ix)
+ {
+ 	pooldir *pd = root.GetDir(d);
+ 	if(!pd) return false;
+ 	pd->ClrVali(ix);
+ 	return true;
+ }
+ 
  BL pooldata::ClrAll(const AtomList &d,BL rec,BL dironly)
  {
***************
*** 108,111 ****
--- 117,121 ----
  	return pd?pd->CntAll():0;
  }
+ */
  
  I pooldata::GetAll(const AtomList &d,A *&keys,AtomList *&lst)
***************
*** 129,132 ****
--- 139,143 ----
  }
  
+ /*
  I pooldata::CntSub(const AtomList &d)
  {
***************
*** 134,137 ****
--- 145,149 ----
  	return pd?pd->CntSub():0;
  }
+ */
  
  I pooldata::GetSub(const AtomList &d,const t_atom **&dirs)
***************
*** 150,157 ****
  {
  	pooldir *pd = root.GetDir(d);
! 	if(pd)
! 		return pd->Paste(clip,depth,repl,mkdir);
! 	else
! 		return false;
  }
  
--- 162,166 ----
  {
  	pooldir *pd = root.GetDir(d);
! 	return pd && pd->Paste(clip,depth,repl,mkdir);
  }
  
***************
*** 291,294 ****
      return false;
  }
- 
- 
--- 300,301 ----

Index: main.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/pool/source/main.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** main.cpp	17 Aug 2004 04:11:28 -0000	1.5
--- main.cpp	30 Oct 2004 03:58:59 -0000	1.6
***************
*** 17,20 ****
--- 17,22 ----
  #define DCNT 16
  
+ const t_symbol *sym_echo = flext::MakeSymbol("echo");
+ 
  class pool:
  	public flext_base
***************
*** 24,28 ****
  public:
  	pool(I argc,const A *argv);
! 	~pool();
  
  	static V setup(t_classid);
--- 26,30 ----
  public:
  	pool(I argc,const A *argv);
! 	virtual ~pool();
  
  	static V setup(t_classid);
***************
*** 56,62 ****
  
  	// handle data
! 	V m_set(I argc,const A *argv) { set(MakeSymbol("set"),argc,argv,true); }
! 	V m_add(I argc,const A *argv) { set(MakeSymbol("add"),argc,argv,false); }
  	V m_clr(I argc,const A *argv);
  	V m_clrall();	// only values
  	V m_clrrec();	// also subdirectories
--- 58,66 ----
  
  	// handle data
! 	V m_set(I argc,const A *argv) { set(argc,argv,true); }
! 	V m_seti(I argc,const A *argv); // set value at index
! 	V m_add(I argc,const A *argv) { set(argc,argv,false); }
  	V m_clr(I argc,const A *argv);
+ 	V m_clri(I ix); // clear value at index
  	V m_clrall();	// only values
  	V m_clrrec();	// also subdirectories
***************
*** 80,92 ****
  
  	// cut/copy/paste
! 	V m_paste(I argc,const A *argv) { paste(MakeSymbol("paste"),argc,argv,true); } // paste contents of clipboard
! 	V m_pasteadd(I argc,const A *argv) { paste(MakeSymbol("pasteadd"),argc,argv,false); } // paste but don't replace
  	V m_clrclip();  // clear clipboard
! 	V m_cut(I argc,const A *argv) { copy(MakeSymbol("cut"),argc,argv,true); } // cut value into clipboard
! 	V m_copy(I argc,const A *argv) { copy(MakeSymbol("copy"),argc,argv,false); } 	// copy value into clipboard
! 	V m_cutall() { copyall(MakeSymbol("cutall"),true,0); }   // cut all values in current directory into clipboard
! 	V m_copyall() { copyall(MakeSymbol("copyall"),false,0); }   // copy all values in current directory into clipboard
! 	V m_cutrec(I argc,const A *argv) { copyrec(MakeSymbol("cutrec"),argc,argv,true); }   // cut directory (and subdirs) into clipboard
! 	V m_copyrec(I argc,const A *argv) { copyrec(MakeSymbol("copyrec"),argc,argv,false); }   // cut directory (and subdirs) into clipboard
  
  	// load/save from/to file
--- 84,96 ----
  
  	// cut/copy/paste
! 	V m_paste(I argc,const A *argv) { paste(thisTag(),argc,argv,true); } // paste contents of clipboard
! 	V m_pasteadd(I argc,const A *argv) { paste(thisTag(),argc,argv,false); } // paste but don't replace
  	V m_clrclip();  // clear clipboard
! 	V m_cut(I argc,const A *argv) { copy(thisTag(),argc,argv,true); } // cut value into clipboard
! 	V m_copy(I argc,const A *argv) { copy(thisTag(),argc,argv,false); } 	// copy value into clipboard
! 	V m_cutall() { copyall(thisTag(),true,0); }   // cut all values in current directory into clipboard
! 	V m_copyall() { copyall(thisTag(),false,0); }   // copy all values in current directory into clipboard
! 	V m_cutrec(I argc,const A *argv) { copyrec(thisTag(),argc,argv,true); }   // cut directory (and subdirs) into clipboard
! 	V m_copyrec(I argc,const A *argv) { copyrec(thisTag(),argc,argv,false); }   // cut directory (and subdirs) into clipboard
  
  	// load/save from/to file
***************
*** 116,120 ****
      enum get_t { get_norm,get_cnt,get_print };
  
! 	V set(const S *tag,I argc,const A *argv,BL over);
  	V getdir(const S *tag);
  	I getrec(const S *tag,I level,BL order,get_t how = get_norm,const AtomList &rdir = AtomList());
--- 120,124 ----
      enum get_t { get_norm,get_cnt,get_print };
  
! 	V set(I argc,const A *argv,BL over);
  	V getdir(const S *tag);
  	I getrec(const S *tag,I level,BL order,get_t how = get_norm,const AtomList &rdir = AtomList());
***************
*** 133,137 ****
  	V svrec(I argc,const A *argv,BL xml);   // save values recursively
  
! 	V echodir() { if(echo) getdir(MakeSymbol("echo")); }
  
  	BL priv,absdir,echo;
--- 137,141 ----
  	V svrec(I argc,const A *argv,BL xml);   // save values recursively
  
! 	V echodir() { if(echo) getdir(sym_echo); }
  
  	BL priv,absdir,echo;
***************
*** 174,179 ****
--- 178,185 ----
  
  	FLEXT_CALLBACK_V(m_set)
+ 	FLEXT_CALLBACK_V(m_seti)
  	FLEXT_CALLBACK_V(m_add)
  	FLEXT_CALLBACK_V(m_clr)
+ 	FLEXT_CALLBACK_I(m_clri)
  	FLEXT_CALLBACK(m_clrall)
  	FLEXT_CALLBACK(m_clrrec)
***************
*** 240,245 ****
  
  	FLEXT_CADDMETHOD_(c,0,"reset",m_reset);
- 	FLEXT_CADDMETHOD_(c,0,"set",m_set);
- 	FLEXT_CADDMETHOD_(c,0,"add",m_add);
  	FLEXT_CADDMETHOD_(c,0,"getdir",m_getdir);
  	FLEXT_CADDMETHOD_(c,0,"mkdir",m_mkdir);
--- 246,249 ----
***************
*** 254,258 ****
--- 258,265 ----
  
  	FLEXT_CADDMETHOD_(c,0,"set",m_set);
+ 	FLEXT_CADDMETHOD_(c,0,"seti",m_seti);
+ 	FLEXT_CADDMETHOD_(c,0,"add",m_add);
  	FLEXT_CADDMETHOD_(c,0,"clr",m_clr);
+ 	FLEXT_CADDMETHOD_(c,0,"clri",m_clri);
  	FLEXT_CADDMETHOD_(c,0,"clrall",m_clrall);
  	FLEXT_CADDMETHOD_(c,0,"clrrec",m_clrrec);
***************
*** 393,403 ****
  }
  
! V pool::m_getdir() { getdir(MakeSymbol("getdir")); }
  
  V pool::m_mkdir(I argc,const A *argv,BL abs,BL chg)
  {
!     const char *nm = chg?"mkchdir":"mkdir";
  	if(!ValChk(argc,argv))
! 		post("%s - %s: invalid directory name",thisName(),nm);
  	else {
  		AtomList ndir;
--- 400,410 ----
  }
  
! V pool::m_getdir() { getdir(thisTag()); }
  
  V pool::m_mkdir(I argc,const A *argv,BL abs,BL chg)
  {
! //    const char *nm = chg?"mkchdir":"mkdir";
  	if(!ValChk(argc,argv))
! 		post("%s - %s: invalid directory name",thisName(),GetString(thisTag()));
  	else {
  		AtomList ndir;
***************
*** 405,409 ****
  		else (ndir = curdir).Append(argc,argv);
  		if(!pl->MkDir(ndir,vcnt,dcnt)) {
! 			post("%s - %s: directory couldn't be created",thisName(),nm);
  		}
          else if(chg) 
--- 412,416 ----
  		else (ndir = curdir).Append(argc,argv);
  		if(!pl->MkDir(ndir,vcnt,dcnt)) {
! 			post("%s - %s: directory couldn't be created",thisName(),GetString(thisTag()));
  		}
          else if(chg) 
***************
*** 418,422 ****
  {
  	if(!ValChk(argc,argv)) 
! 		post("%s - chdir: invalid directory name",thisName());
  	else {
  		AtomList prv(curdir);
--- 425,429 ----
  {
  	if(!ValChk(argc,argv)) 
! 		post("%s - %s: invalid directory name",thisName(),GetString(thisTag()));
  	else {
  		AtomList prv(curdir);
***************
*** 424,428 ****
  		else curdir.Append(argc,argv);
  		if(!pl->ChkDir(curdir)) {
! 			post("%s - chdir: directory couldn't be changed",thisName());
  			curdir = prv;
  		}
--- 431,435 ----
  		else curdir.Append(argc,argv);
  		if(!pl->ChkDir(curdir)) {
! 			post("%s - %s: directory couldn't be changed",thisName(),GetString(thisTag()));
  			curdir = prv;
  		}
***************
*** 438,448 ****
  		if(CanbeInt(argv[0])) {
  			if(argc > 1)
! 				post("%s - updir: superfluous arguments ignored",thisName());
  			lvls = GetAInt(argv[0]);
  			if(lvls < 0)
! 				post("%s - updir: invalid level specification - set to 1",thisName());
  		}
  		else
! 			post("%s - updir: invalid level specification - set to 1",thisName());
  	}
  
--- 445,455 ----
  		if(CanbeInt(argv[0])) {
  			if(argc > 1)
! 				post("%s - %s: superfluous arguments ignored",thisName(),GetString(thisTag()));
  			lvls = GetAInt(argv[0]);
  			if(lvls < 0)
! 				post("%s - %s: invalid level specification - set to 1",thisName(),GetString(thisTag()));
  		}
  		else
! 			post("%s - %s: invalid level specification - set to 1",thisName(),GetString(thisTag()));
  	}
  
***************
*** 450,454 ****
  
  	if(lvls > curdir.Count()) {
! 		post("%s - updir: level exceeds directory depth - corrected",thisName());
  		curdir();
  	}
--- 457,461 ----
  
  	if(lvls > curdir.Count()) {
! 		post("%s - %s: level exceeds directory depth - corrected",thisName(),GetString(thisTag()));
  		curdir();
  	}
***************
*** 457,461 ****
  
  	if(!pl->ChkDir(curdir)) {
! 		post("%s - updir: directory couldn't be changed",thisName());
  		curdir = prv;
  	}
--- 464,468 ----
  
  	if(!pl->ChkDir(curdir)) {
! 		post("%s - %s: directory couldn't be changed",thisName(),GetString(thisTag()));
  		curdir = prv;
  	}
***************
*** 470,474 ****
  
  	if(!pl->RmDir(curdir)) 
! 		post("%s - rmdir: directory couldn't be removed",thisName());
  	curdir();
  
--- 477,481 ----
  
  	if(!pl->RmDir(curdir)) 
! 		post("%s - %s: directory couldn't be removed",thisName(),GetString(thisTag()));
  	curdir();
  
***************
*** 476,489 ****
  }
  
! V pool::set(const S *tag,I argc,const A *argv,BL over)
  {
  	if(!argc || !KeyChk(argv[0])) 
! 		post("%s - %s: invalid key",thisName(),GetString(tag));
  	else if(!ValChk(argc-1,argv+1)) {
! 		post("%s - %s: invalid data values",thisName(),GetString(tag));
  	}
  	else 
  		if(!pl->Set(curdir,argv[0],new AtomList(argc-1,argv+1),over))
! 			post("%s - %s: value couldn't be set",thisName(),GetString(tag));
  
  	echodir();
--- 483,510 ----
  }
  
! V pool::set(I argc,const A *argv,BL over)
  {
  	if(!argc || !KeyChk(argv[0])) 
! 		post("%s - %s: invalid key",thisName(),GetString(thisTag()));
  	else if(!ValChk(argc-1,argv+1)) {
! 		post("%s - %s: invalid data values",thisName(),GetString(thisTag()));
  	}
  	else 
  		if(!pl->Set(curdir,argv[0],new AtomList(argc-1,argv+1),over))
! 			post("%s - %s: value couldn't be set",thisName(),GetString(thisTag()));
! 
! 	echodir();
! }
! 
! V pool::m_seti(I argc,const A *argv)
! {
! 	if(!argc || !CanbeInt(argv[0])) 
! 		post("%s - %s: invalid index",thisName(),GetString(thisTag()));
! 	else if(!ValChk(argc-1,argv+1)) {
! 		post("%s - %s: invalid data values",thisName(),GetString(thisTag()));
! 	}
! 	else 
! 		if(!pl->Seti(curdir,GetAInt(argv[0]),new AtomList(argc-1,argv+1)))
! 			post("%s - %s: value couldn't be set",thisName(),GetString(thisTag()));
  
  	echodir();
***************
*** 493,503 ****
  {
  	if(!argc || !KeyChk(argv[0]))
! 		post("%s - clr: invalid key",thisName());
  	else {
  		if(argc > 1) 
! 			post("%s - clr: superfluous arguments ignored",thisName());
  
  		if(!pl->Clr(curdir,argv[0]))
! 			post("%s - clr: value couldn't be cleared",thisName());
  	}
  
--- 514,536 ----
  {
  	if(!argc || !KeyChk(argv[0]))
! 		post("%s - %s: invalid key",thisName(),GetString(thisTag()));
  	else {
  		if(argc > 1) 
! 			post("%s - %s: superfluous arguments ignored",thisName(),GetString(thisTag()));
  
  		if(!pl->Clr(curdir,argv[0]))
! 			post("%s - %s: value couldn't be cleared",thisName(),GetString(thisTag()));
! 	}
! 
! 	echodir();
! }
! 
! V pool::m_clri(I ix)
! {
! 	if(ix < 0)
! 		post("%s - %s: invalid index",thisName(),GetString(thisTag()));
! 	else {
! 		if(!pl->Clri(curdir,ix))
! 			post("%s - %s: value couldn't be cleared",thisName(),GetString(thisTag()));
  	}
  
***************
*** 508,512 ****
  {
  	if(!pl->ClrAll(curdir,false))
! 		post("%s - clrall: values couldn't be cleared",thisName());
  
  	echodir();
--- 541,545 ----
  {
  	if(!pl->ClrAll(curdir,false))
! 		post("%s - %s: values couldn't be cleared",thisName(),GetString(thisTag()));
  
  	echodir();
***************
*** 516,520 ****
  {
  	if(!pl->ClrAll(curdir,true))
! 		post("%s - clrrec: values couldn't be cleared",thisName());
  
  	echodir();
--- 549,553 ----
  {
  	if(!pl->ClrAll(curdir,true))
! 		post("%s - %s: values couldn't be cleared",thisName(),GetString(thisTag()));
  
  	echodir();
***************
*** 524,528 ****
  {
  	if(!pl->ClrAll(curdir,true,true))
! 		post("%s - clrsub: directories couldn't be cleared",thisName());
  
  	echodir();
--- 557,561 ----
  {
  	if(!pl->ClrAll(curdir,true,true))
! 		post("%s - %s: directories couldn't be cleared",thisName(),GetString(thisTag()));
  
  	echodir();
***************
*** 532,543 ****
  {
  	if(!argc || !KeyChk(argv[0]))
! 		post("%s - get: invalid key",thisName());
  	else {
  		if(argc > 1) 
! 			post("%s - get: superfluous arguments ignored",thisName());
  
  		poolval *r = pl->Ref(curdir,argv[0]);
  
! 		ToOutAnything(3,MakeSymbol("get"),0,NULL);
  		if(absdir)
  			ToOutList(2,curdir);
--- 565,576 ----
  {
  	if(!argc || !KeyChk(argv[0]))
! 		post("%s - %s: invalid key",thisName(),GetString(thisTag()));
  	else {
  		if(argc > 1) 
! 			post("%s - %s: superfluous arguments ignored",thisName(),GetString(thisTag()));
  
  		poolval *r = pl->Ref(curdir,argv[0]);
  
! 		ToOutAnything(3,thisTag(),0,NULL);
  		if(absdir)
  			ToOutList(2,curdir);
***************
*** 560,568 ****
  {
  	if(ix < 0)
! 		post("%s - geti: invalid index",thisName());
  	else {
  		poolval *r = pl->Refi(curdir,ix);
  
! 		ToOutAnything(3,MakeSymbol("geti"),0,NULL);
  		if(absdir)
  			ToOutList(2,curdir);
--- 593,601 ----
  {
  	if(ix < 0)
! 		post("%s - %s: invalid index",thisName(),GetString(thisTag()));
  	else {
  		poolval *r = pl->Refi(curdir,ix);
  
! 		ToOutAnything(3,thisTag(),0,NULL);
  		if(absdir)
  			ToOutList(2,curdir);
***************
*** 582,586 ****
  }
  
! I pool::getrec(const S *tag,I level,BL order,get_t how,const AtomList &rdir)
  {
  	AtomList gldir(curdir);
--- 615,619 ----
  }
  
! I pool::getrec(const t_symbol *tag,I level,BL order,get_t how,const AtomList &rdir)
  {
  	AtomList gldir(curdir);
***************
*** 635,639 ****
  V pool::m_getall()
  {
! 	getrec(MakeSymbol("getall"),0,false);
  	ToOutBang(3);
  
--- 668,672 ----
  V pool::m_getall()
  {
! 	getrec(thisTag(),0,false);
  	ToOutBang(3);
  
***************
*** 643,647 ****
  V pool::m_ogetall()
  {
! 	getrec(MakeSymbol("ogetall"),0,true);
  	ToOutBang(3);
  
--- 676,680 ----
  V pool::m_ogetall()
  {
! 	getrec(thisTag(),0,true);
  	ToOutBang(3);
  
***************
*** 655,665 ****
  		if(CanbeInt(argv[0])) {
  			if(argc > 1)
! 				post("%s - getrec: superfluous arguments ignored",thisName());
  			lvls = GetAInt(argv[0]);
  		}
  		else 
! 			post("%s - getrec: invalid level specification - set to infinite",thisName());
  	}
! 	getrec(MakeSymbol("getrec"),lvls,false);
  	ToOutBang(3);
  
--- 688,698 ----
  		if(CanbeInt(argv[0])) {
  			if(argc > 1)
! 				post("%s - %s: superfluous arguments ignored",thisName(),GetString(thisTag()));
  			lvls = GetAInt(argv[0]);
  		}
  		else 
! 			post("%s - %s: invalid level specification - set to infinite",thisName(),GetString(thisTag()));
  	}
! 	getrec(thisTag(),lvls,false);
  	ToOutBang(3);
  
***************
*** 674,684 ****
  		if(CanbeInt(argv[0])) {
  			if(argc > 1)
! 				post("%s - ogetrec: superfluous arguments ignored",thisName());
  			lvls = GetAInt(argv[0]);
  		}
  		else 
! 			post("%s - ogetrec: invalid level specification - set to infinite",thisName());
  	}
! 	getrec(MakeSymbol("ogetrec"),lvls,true);
  	ToOutBang(3);
  
--- 707,717 ----
  		if(CanbeInt(argv[0])) {
  			if(argc > 1)
! 				post("%s - %s: superfluous arguments ignored",thisName(),GetString(thisTag()));
  			lvls = GetAInt(argv[0]);
  		}
  		else 
! 			post("%s - %s: invalid level specification - set to infinite",thisName(),GetString(thisTag()));
  	}
! 	getrec(thisTag(),lvls,true);
  	ToOutBang(3);
  
***************
*** 728,739 ****
  		if(CanbeInt(argv[0])) {
  			if(argc > 1)
! 				post("%s - getsub: superfluous arguments ignored",thisName());
  			lvls = GetAInt(argv[0]);
  		}
  		else 
! 			post("%s - getsub: invalid level specification - set to 0",thisName());
  	}
  
! 	getsub(MakeSymbol("getsub"),lvls,false);
  	ToOutBang(3);
  
--- 761,772 ----
  		if(CanbeInt(argv[0])) {
  			if(argc > 1)
! 				post("%s - %s: superfluous arguments ignored",thisName(),GetString(thisTag()));
  			lvls = GetAInt(argv[0]);
  		}
  		else 
! 			post("%s - %s: invalid level specification - set to 0",thisName(),GetString(thisTag()));
  	}
  
! 	getsub(thisTag(),lvls,false);
  	ToOutBang(3);
  
***************
*** 748,759 ****
  		if(CanbeInt(argv[0])) {
  			if(argc > 1)
! 				post("%s - ogetsub: superfluous arguments ignored",thisName());
  			lvls = GetAInt(argv[0]);
  		}
  		else 
! 			post("%s - ogetsub: invalid level specification - set to 0",thisName());
  	}
  
! 	getsub(MakeSymbol("ogetsub"),lvls,true); 
  	ToOutBang(3);
  
--- 781,792 ----
  		if(CanbeInt(argv[0])) {
  			if(argc > 1)
! 				post("%s - %s: superfluous arguments ignored",thisName(),GetString(thisTag()));
  			lvls = GetAInt(argv[0]);
  		}
  		else 
! 			post("%s - %s: invalid level specification - set to 0",thisName(),GetString(thisTag()));
  	}
  
! 	getsub(thisTag(),lvls,true); 
  	ToOutBang(3);
  
***************
*** 764,770 ****
  V pool::m_cntall()
  {
! 	const S *tag = MakeSymbol("cntall");
! 	I cnt = getrec(tag,0,false,get_cnt);
! 	ToOutSymbol(3,tag);
  	ToOutBang(2);
  	ToOutBang(1);
--- 797,802 ----
  V pool::m_cntall()
  {
! 	I cnt = getrec(thisTag(),0,false,get_cnt);
! 	ToOutSymbol(3,thisTag());
  	ToOutBang(2);
  	ToOutBang(1);
***************
*** 776,794 ****
  V pool::m_cntrec(I argc,const A *argv)
  {
- 	const S *tag = MakeSymbol("cntrec");
- 
  	I lvls = -1;
  	if(argc > 0) {
  		if(CanbeInt(argv[0])) {
  			if(argc > 1)
! 				post("%s - %s: superfluous arguments ignored",thisName(),GetString(tag));
  			lvls = GetAInt(argv[0]);
  		}
  		else 
! 			post("%s - %s: invalid level specification - set to infinite",thisName(),GetString(tag));
  	}
  	
! 	I cnt = getrec(tag,lvls,false,get_cnt);
! 	ToOutSymbol(3,tag);
  	ToOutBang(2);
  	ToOutBang(1);
--- 808,824 ----
  V pool::m_cntrec(I argc,const A *argv)
  {
  	I lvls = -1;
  	if(argc > 0) {
  		if(CanbeInt(argv[0])) {
  			if(argc > 1)
! 				post("%s - %s: superfluous arguments ignored",thisName(),GetString(thisTag()));
  			lvls = GetAInt(argv[0]);
  		}
  		else 
! 			post("%s - %s: invalid level specification - set to infinite",thisName(),GetString(thisTag()));
  	}
  	
! 	I cnt = getrec(thisTag(),lvls,false,get_cnt);
! 	ToOutSymbol(3,thisTag());
  	ToOutBang(2);
  	ToOutBang(1);
***************
*** 801,819 ****
  V pool::m_cntsub(I argc,const A *argv)
  {
- 	const S *tag = MakeSymbol("cntsub");
- 
  	I lvls = 0;
  	if(argc > 0) {
  		if(CanbeInt(argv[0])) {
  			if(argc > 1)
! 				post("%s - %s: superfluous arguments ignored",thisName(),GetString(tag));
  			lvls = GetAInt(argv[0]);
  		}
  		else 
! 			post("%s - %s: invalid level specification - set to 0",thisName(),GetString(tag));
  	}
  
! 	I cnt = getsub(tag,lvls,false,get_cnt);
! 	ToOutSymbol(3,tag);
  	ToOutBang(2);
  	ToOutBang(1);
--- 831,847 ----
  V pool::m_cntsub(I argc,const A *argv)
  {
  	I lvls = 0;
  	if(argc > 0) {
  		if(CanbeInt(argv[0])) {
  			if(argc > 1)
! 				post("%s - %s: superfluous arguments ignored",thisName(),GetString(thisTag()));
  			lvls = GetAInt(argv[0]);
  		}
  		else 
! 			post("%s - %s: invalid level specification - set to 0",thisName(),GetString(thisTag()));
  	}
  
! 	I cnt = getsub(thisTag(),lvls,false,get_cnt);
! 	ToOutSymbol(3,thisTag());
  	ToOutBang(2);
  	ToOutBang(1);
***************
*** 825,830 ****
  V pool::m_printall()
  {
!     const S *tag = MakeSymbol("printall");
! 	I cnt = getrec(tag,0,false,get_print);
      post("");
  }
--- 853,857 ----
  V pool::m_printall()
  {
! 	I cnt = getrec(thisTag(),0,false,get_print);
      post("");
  }
***************
*** 939,955 ****
  V pool::load(I argc,const A *argv,BL xml)
  {
-     const C *sym = xml?"loadx":"load";
  	const C *flnm = NULL;
  	if(argc > 0) {
! 		if(argc > 1) post("%s - %s: superfluous arguments ignored",thisName(),sym);
  		if(IsString(argv[0])) flnm = GetString(argv[0]);
  	}
  
  	if(!flnm) 
! 		post("%s - %s: no filename given",thisName(),sym);
  	else {
  		string fl(MakeFilename(flnm));
  		if(!(xml?pl->LoadXML(fl.c_str()):pl->Load(fl.c_str())))
! 			post("%s - %s: error loading data",thisName(),sym);
  	}
  
--- 966,981 ----
  V pool::load(I argc,const A *argv,BL xml)
  {
  	const C *flnm = NULL;
  	if(argc > 0) {
! 		if(argc > 1) post("%s - %s: superfluous arguments ignored",thisName(),GetString(thisTag()));
  		if(IsString(argv[0])) flnm = GetString(argv[0]);
  	}
  
  	if(!flnm) 
! 		post("%s - %s: no filename given",thisName(),GetString(thisTag()));
  	else {
  		string fl(MakeFilename(flnm));
  		if(!(xml?pl->LoadXML(fl.c_str()):pl->Load(fl.c_str())))
! 			post("%s - %s: error loading data",thisName(),GetString(thisTag()));
  	}
  
***************
*** 959,975 ****
  V pool::save(I argc,const A *argv,BL xml)
  {
-     const C *sym = xml?"savex":"save";
  	const C *flnm = NULL;
  	if(argc > 0) {
! 		if(argc > 1) post("%s - %s: superfluous arguments ignored",thisName(),sym);
  		if(IsString(argv[0])) flnm = GetString(argv[0]);
  	}
  
  	if(!flnm) 
! 		post("%s - %s: no filename given",thisName(),sym);
  	else {
  		string fl(MakeFilename(flnm));
  		if(!(xml?pl->SaveXML(fl.c_str()):pl->Save(fl.c_str())))
! 			post("%s - %s: error saving data",thisName(),sym);
  	}
  
--- 985,1000 ----
  V pool::save(I argc,const A *argv,BL xml)
  {
  	const C *flnm = NULL;
  	if(argc > 0) {
! 		if(argc > 1) post("%s - %s: superfluous arguments ignored",thisName(),GetString(thisTag()));
  		if(IsString(argv[0])) flnm = GetString(argv[0]);
  	}
  
  	if(!flnm) 
! 		post("%s - %s: no filename given",thisName(),GetString(thisTag()));
  	else {
  		string fl(MakeFilename(flnm));
  		if(!(xml?pl->SaveXML(fl.c_str()):pl->Save(fl.c_str())))
! 			post("%s - %s: error saving data",thisName(),GetString(thisTag()));
  	}
  
***************
*** 979,995 ****
  V pool::lddir(I argc,const A *argv,BL xml)
  {
-     const C *sym = xml?"ldxdir":"lddir";
  	const C *flnm = NULL;
  	if(argc > 0) {
! 		if(argc > 1) post("%s - %s: superfluous arguments ignored",thisName(),sym);
  		if(IsString(argv[0])) flnm = GetString(argv[0]);
  	}
  
  	if(!flnm)
! 		post("%s - %s: invalid filename",thisName(),sym);
  	else {
  		string fl(MakeFilename(flnm));
  		if(!(xml?pl->LdDirXML(curdir,fl.c_str(),0):pl->LdDir(curdir,fl.c_str(),0))) 
! 			post("%s - %s: directory couldn't be loaded",thisName(),sym);
  	}
  
--- 1004,1019 ----
  V pool::lddir(I argc,const A *argv,BL xml)
  {
  	const C *flnm = NULL;
  	if(argc > 0) {
! 		if(argc > 1) post("%s - %s: superfluous arguments ignored",thisName(),GetString(thisTag()));
  		if(IsString(argv[0])) flnm = GetString(argv[0]);
  	}
  
  	if(!flnm)
! 		post("%s - %s: invalid filename",thisName(),GetString(thisTag()));
  	else {
  		string fl(MakeFilename(flnm));
  		if(!(xml?pl->LdDirXML(curdir,fl.c_str(),0):pl->LdDir(curdir,fl.c_str(),0))) 
! 			post("%s - %s: directory couldn't be loaded",thisName(),GetString(thisTag()));
  	}
  
***************
*** 999,1003 ****
  V pool::ldrec(I argc,const A *argv,BL xml)
  {
-     const C *sym = xml?"ldxrec":"ldrec";
  	const C *flnm = NULL;
  	I depth = -1;
--- 1023,1026 ----
***************
*** 1009,1020 ****
  			if(CanbeInt(argv[1])) depth = GetAInt(argv[1]);
  			else
! 				post("%s - %s: invalid depth argument - set to -1",thisName(),sym);
  
  			if(argc >= 3) {
  				if(CanbeBool(argv[2])) mkdir = GetABool(argv[2]);
  				else
! 					post("%s - %s: invalid mkdir argument - set to true",thisName(),sym);
  
! 				if(argc > 3) post("%s - %s: superfluous arguments ignored",thisName(),sym);
  			}
  		}
--- 1032,1043 ----
  			if(CanbeInt(argv[1])) depth = GetAInt(argv[1]);
  			else
! 				post("%s - %s: invalid depth argument - set to -1",thisName(),GetString(thisTag()));
  
  			if(argc >= 3) {
  				if(CanbeBool(argv[2])) mkdir = GetABool(argv[2]);
  				else
! 					post("%s - %s: invalid mkdir argument - set to true",thisName(),GetString(thisTag()));
  
! 				if(argc > 3) post("%s - %s: superfluous arguments ignored",thisName(),GetString(thisTag()));
  			}
  		}
***************
*** 1022,1030 ****
  
  	if(!flnm)
! 		post("%s - %s: invalid filename",thisName(),sym);
  	else {
  		string fl(MakeFilename(flnm));
          if(!(xml?pl->LdDirXML(curdir,fl.c_str(),depth,mkdir):pl->LdDir(curdir,fl.c_str(),depth,mkdir))) 
! 		    post("%s - %s: directory couldn't be saved",thisName(),sym);
  	}
  
--- 1045,1053 ----
  
  	if(!flnm)
! 		post("%s - %s: invalid filename",thisName(),GetString(thisTag()));
  	else {
  		string fl(MakeFilename(flnm));
          if(!(xml?pl->LdDirXML(curdir,fl.c_str(),depth,mkdir):pl->LdDir(curdir,fl.c_str(),depth,mkdir))) 
! 		    post("%s - %s: directory couldn't be saved",thisName(),GetString(thisTag()));
  	}
  
***************
*** 1034,1050 ****
  V pool::svdir(I argc,const A *argv,BL xml)
  {
-     const C *sym = xml?"svxdir":"svdir";
  	const C *flnm = NULL;
  	if(argc > 0) {
! 		if(argc > 1) post("%s - %s: superfluous arguments ignored",thisName(),sym);
  		if(IsString(argv[0])) flnm = GetString(argv[0]);
  	}
  
  	if(!flnm)
! 		post("%s - %s: invalid filename",thisName(),sym);
  	else {
  		string fl(MakeFilename(flnm));
          if(!(xml?pl->SvDirXML(curdir,fl.c_str(),0,absdir):pl->SvDir(curdir,fl.c_str(),0,absdir))) 
! 		post("%s - %s: directory couldn't be saved",thisName(),sym);
  	}
  
--- 1057,1072 ----
  V pool::svdir(I argc,const A *argv,BL xml)
  {
  	const C *flnm = NULL;
  	if(argc > 0) {
! 		if(argc > 1) post("%s - %s: superfluous arguments ignored",thisName(),GetString(thisTag()));
  		if(IsString(argv[0])) flnm = GetString(argv[0]);
  	}
  
  	if(!flnm)
! 		post("%s - %s: invalid filename",thisName(),GetString(thisTag()));
  	else {
  		string fl(MakeFilename(flnm));
          if(!(xml?pl->SvDirXML(curdir,fl.c_str(),0,absdir):pl->SvDir(curdir,fl.c_str(),0,absdir))) 
! 		post("%s - %s: directory couldn't be saved",thisName(),GetString(thisTag()));
  	}
  
***************
*** 1054,1070 ****
  V pool::svrec(I argc,const A *argv,BL xml)
  {
-     const C *sym = xml?"svxrec":"svrec";
  	const C *flnm = NULL;
  	if(argc > 0) {
! 		if(argc > 1) post("%s - %s: superfluous arguments ignored",thisName(),sym);
  		if(IsString(argv[0])) flnm = GetString(argv[0]);
  	}
  
  	if(!flnm)
! 		post("%s - %s: invalid filename",thisName(),sym);
  	else {
  		string fl(MakeFilename(flnm));
          if(!(xml?pl->SvDirXML(curdir,fl.c_str(),-1,absdir):pl->SvDir(curdir,fl.c_str(),-1,absdir))) 
! 		post("%s - %s: directory couldn't be saved",thisName(),sym);
  	}
  
--- 1076,1091 ----
  V pool::svrec(I argc,const A *argv,BL xml)
  {
  	const C *flnm = NULL;
  	if(argc > 0) {
! 		if(argc > 1) post("%s - %s: superfluous arguments ignored",thisName(),GetString(thisTag()));
  		if(IsString(argv[0])) flnm = GetString(argv[0]);
  	}
  
  	if(!flnm)
! 		post("%s - %s: invalid filename",thisName(),GetString(thisTag()));
  	else {
  		string fl(MakeFilename(flnm));
          if(!(xml?pl->SvDirXML(curdir,fl.c_str(),-1,absdir):pl->SvDir(curdir,fl.c_str(),-1,absdir))) 
! 		post("%s - %s: directory couldn't be saved",thisName(),GetString(thisTag()));
  	}
  
***************
*** 1097,1101 ****
  		ToOutInt(ix,GetInt(a));
  	else
! 		post("%s - output atom: type not supported!",thisName());
  }
  
--- 1118,1122 ----
  		ToOutInt(ix,GetInt(a));
  	else
! 		post("%s - %s type not supported!",thisName(),GetString(thisTag()));
  }
  

Index: pool.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/pool/source/pool.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** pool.cpp	21 Aug 2004 04:13:01 -0000	1.8
--- pool.cpp	30 Oct 2004 03:59:00 -0000	1.9
***************
*** 192,196 ****
  V pooldir::SetVal(const A &key,AtomList *data,BL over)
  {
! 	I c = 1,vix = VIdx(key);
  	poolval *prv = NULL,*ix = vals[vix].v;
  	for(; ix; prv = ix,ix = ix->nxt) {
--- 192,196 ----
  V pooldir::SetVal(const A &key,AtomList *data,BL over)
  {
!     I c = 1,vix = VIdx(key);
  	poolval *prv = NULL,*ix = vals[vix].v;
  	for(; ix; prv = ix,ix = ix->nxt) {
***************
*** 229,232 ****
--- 229,264 ----
  }
  
+ BL pooldir::SetVali(I rix,AtomList *data)
+ {
+     poolval *prv = NULL,*ix = NULL;
+ 	for(I vix = 0; vix < vsize; ++vix) 
+ 		if(rix > vals[vix].cnt) rix -= vals[vix].cnt;
+ 		else {
+ 			ix = vals[vix].v;
+ 			for(; ix && rix; prv = ix,ix = ix->nxt) --rix;
+ 			if(ix && !rix) break;
+ 		}  
+ 
+ 	if(ix) { 
+ 		// data exists... overwrite it
+ 		
+ 		if(data)
+ 			ix->Set(data);
+ 		else {
+ 			// delete key
+ 		
+ 			poolval *nv = ix->nxt;
+ 			if(prv) prv->nxt = nv;
+ 			else vals[vix].v = nv;
+ 			vals[vix].cnt--;
+ 			ix->nxt = NULL;
+ 			delete ix;
+ 		}
+         return true;
+ 	}
+     else
+         return false;
+ }
+ 
  poolval *pooldir::RefVal(const A &key)
  {
***************
*** 241,245 ****
  }
  
- 
  poolval *pooldir::RefVali(I rix)
  {
--- 273,276 ----

Index: pool.h
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/pool/source/pool.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** pool.h	17 Aug 2004 04:11:28 -0000	1.6
--- pool.h	30 Oct 2004 03:59:01 -0000	1.7
***************
*** 70,74 ****
--- 70,76 ----
  
  	V SetVal(const A &key,AtomList *data,BL over = true);
+ 	BL SetVali(I ix,AtomList *data);
  	V ClrVal(const A &key) { SetVal(key,NULL); }
+     BL ClrVali(I ix) { return SetVali(ix,NULL); }
  	AtomList *PeekVal(const A &key);
  	AtomList *GetVal(const A &key,BL cut = false);
***************
*** 117,120 ****
--- 119,123 ----
  };
  
+ 
  class pooldata:
  	public flext
***************
*** 127,146 ****
  	BL Pop() { return --refs > 0; }
  
! 	V Reset();
! 	BL MkDir(const AtomList &d,I vcnt = 0,I dcnt = 0); 
! 	BL ChkDir(const AtomList &d);
! 	BL RmDir(const AtomList &d);
  
- 	BL Set(const AtomList &d,const A &key,AtomList *data,BL over = true);
- 	BL Clr(const AtomList &d,const A &key);
- 	BL ClrAll(const AtomList &d,BL rec,BL dironly = false);
- 	AtomList *Peek(const AtomList &d,const A &key);
- 	AtomList *Get(const AtomList &d,const A &key);
- 	poolval *Ref(const AtomList &d,const A &key);
- 	poolval *Refi(const AtomList &d,I ix);
- 	I CntAll(const AtomList &d);
  	I PrintAll(const AtomList &d);
  	I GetAll(const AtomList &d,A *&keys,AtomList *&lst);
! 	I CntSub(const AtomList &d);
  	I GetSub(const AtomList &d,const t_atom **&dirs);
  
--- 130,230 ----
  	BL Pop() { return --refs > 0; }
  
!     V Reset() { root.Reset(); }
! 
!     BL MkDir(const AtomList &d,I vcnt = 0,I dcnt = 0) 
!     { 
!         root.AddDir(d,vcnt,dcnt); 
!         return true; 
!     }
! 
!     BL ChkDir(const AtomList &d) 
!     { 
!         return root.GetDir(d) != NULL; 
!     }
! 
!     BL RmDir(const AtomList &d) 
!     { 
!         return root.DelDir(d); 
!     }
! 
!     BL Set(const AtomList &d,const A &key,AtomList *data,BL over = true)
!     {
! 	    pooldir *pd = root.GetDir(d);
! 	    if(!pd) return false;
! 	    pd->SetVal(key,data,over);
! 	    return true;
!     }
! 
!     BL Seti(const AtomList &d,I ix,AtomList *data)
!     {
! 	    pooldir *pd = root.GetDir(d);
! 	    if(!pd) return false;
! 	    pd->SetVali(ix,data);
! 	    return true;
!     }
! 
! 	BL Clr(const AtomList &d,const A &key)
!     {
! 	    pooldir *pd = root.GetDir(d);
! 	    if(!pd) return false;
! 	    pd->ClrVal(key);
! 	    return true;
!     }
! 
! 	BL Clri(const AtomList &d,I ix)
!     {
! 	    pooldir *pd = root.GetDir(d);
! 	    if(!pd) return false;
! 	    pd->ClrVali(ix);
! 	    return true;
!     }
! 
! 	BL ClrAll(const AtomList &d,BL rec,BL dironly = false)
!     {
! 	    pooldir *pd = root.GetDir(d);
! 	    if(!pd) return false;
! 	    pd->Clear(rec,dironly);
! 	    return true;
!     }
! 
! 	AtomList *Peek(const AtomList &d,const A &key)
!     {
! 	    pooldir *pd = root.GetDir(d);
! 	    return pd?pd->PeekVal(key):NULL;
!     }
! 
! 	AtomList *Get(const AtomList &d,const A &key)
!     {
! 	    pooldir *pd = root.GetDir(d);
! 	    return pd?pd->GetVal(key):NULL;
!     }
! 
! 	poolval *Ref(const AtomList &d,const A &key)
!     {
! 	    pooldir *pd = root.GetDir(d);
! 	    return pd?pd->RefVal(key):NULL;
!     }
! 
! 	poolval *Refi(const AtomList &d,I ix)
!     {
! 	    pooldir *pd = root.GetDir(d);
! 	    return pd?pd->RefVali(ix):NULL;
!     }
! 
! 	I CntAll(const AtomList &d)
!     {
! 	    pooldir *pd = root.GetDir(d);
! 	    return pd?pd->CntAll():0;
!     }
  
  	I PrintAll(const AtomList &d);
  	I GetAll(const AtomList &d,A *&keys,AtomList *&lst);
! 
!     I CntSub(const AtomList &d)
!     {
! 	    pooldir *pd = root.GetDir(d);
! 	    return pd?pd->CntSub():0;
!     }
! 
  	I GetSub(const AtomList &d,const t_atom **&dirs);
  





More information about the Pd-cvs mailing list