diff options
Diffstat (limited to 'externals/grill/pool/pool.h')
-rw-r--r-- | externals/grill/pool/pool.h | 164 |
1 files changed, 0 insertions, 164 deletions
diff --git a/externals/grill/pool/pool.h b/externals/grill/pool/pool.h deleted file mode 100644 index 99e271b3..00000000 --- a/externals/grill/pool/pool.h +++ /dev/null @@ -1,164 +0,0 @@ -/* - -pool - hierarchical storage object for PD and Max/MSP - -Copyright (c) 2002-2003 Thomas Grill (xovo@gmx.net) -For information on usage and redistribution, and for a DISCLAIMER OF ALL -WARRANTIES, see the file, "license.txt," in this distribution. - -*/ - -#ifndef __POOL_H -#define __POOL_H - -#define FLEXT_ATTRIBUTES 1 - -#include <flext.h> - -#if !defined(FLEXT_VERSION) || (FLEXT_VERSION < 402) -#error You need at least flext version 0.4.2 -#endif - -#include <iostream> - -using namespace std; - -typedef void V; -typedef int I; -typedef unsigned long UL; -typedef float F; -typedef char C; -typedef bool BL; -typedef t_atom A; -typedef t_symbol S; - -class poolval: - public flext -{ -public: - poolval(const A &key,AtomList *data); - ~poolval(); - - poolval &Set(AtomList *data); - poolval *Dup() const; - - A key; - AtomList *data; - poolval *nxt; -}; - -class pooldir: - public flext -{ -public: - pooldir(const A &dir,pooldir *parent,I vcnt = 0,I dcnt = 0); - ~pooldir(); - - V Clear(BL rec,BL dironly = false); - V Reset(BL realloc = true); - - BL Empty() const { return !dirs && !vals; } - BL HasDirs() const { return dirs != NULL; } - BL HasVals() const { return vals != NULL; } - - pooldir *GetDir(I argc,const A *argv,BL cut = false); - pooldir *GetDir(const AtomList &d,BL cut = false) { return GetDir(d.Count(),d.Atoms(),cut); } - BL DelDir(I argc,const A *argv); - BL DelDir(const AtomList &d) { return DelDir(d.Count(),d.Atoms()); } - pooldir *AddDir(I argc,const A *argv,I vcnt = 0,I dcnt = 0); - pooldir *AddDir(const AtomList &d,I vcnt = 0,I dcnt = 0) { return AddDir(d.Count(),d.Atoms(),vcnt,dcnt); } - - V SetVal(const A &key,AtomList *data,BL over = true); - V ClrVal(const A &key) { SetVal(key,NULL); } - AtomList *PeekVal(const A &key); - AtomList *GetVal(const A &key,BL cut = false); - I CntAll() const; - I GetAll(A *&keys,AtomList *&lst,BL cut = false); - I PrintAll(char *buf,int len) const; - I GetKeys(AtomList &keys); - I CntSub() const; - I GetSub(const A **&dirs); - - poolval *RefVal(const A &key); - poolval *RefVali(I ix); - - BL Paste(const pooldir *p,I depth,BL repl,BL mkdir); - BL Copy(pooldir *p,I depth,BL cur); - - BL LdDir(istream &is,I depth,BL mkdir); - BL LdDirXML(istream &is,I depth,BL mkdir); - BL SvDir(ostream &os,I depth,const AtomList &dir = AtomList()); - BL SvDirXML(ostream &os,I depth,const AtomList &dir = AtomList(),I ind = 0); - - int VSize() const { return vsize; } - int DSize() const { return dsize; } - -protected: - int VIdx(const A &v) const { return FoldBits(AtomHash(v),vbits); } - int DIdx(const A &d) const { return FoldBits(AtomHash(d),dbits); } - - A dir; - pooldir *nxt; - - pooldir *parent; - const I vbits,dbits,vsize,dsize; - - struct valentry { int cnt; poolval *v; }; - struct direntry { int cnt; pooldir *d; }; - - valentry *vals; - direntry *dirs; -}; - -class pooldata: - public flext -{ -public: - pooldata(const S *s = NULL,I vcnt = 0,I dcnt = 0); - ~pooldata(); - - V Push() { ++refs; } - 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); - - BL Paste(const AtomList &d,const pooldir *clip,I depth = -1,BL repl = true,BL mkdir = true); - pooldir *Copy(const AtomList &d,const A &key,BL cut); - pooldir *CopyAll(const AtomList &d,I depth,BL cut); - - BL LdDir(const AtomList &d,const C *flnm,I depth,BL mkdir = true); - BL SvDir(const AtomList &d,const C *flnm,I depth,BL absdir); - BL Load(const C *flnm) { return LdDir(AtomList(),flnm,-1); } - BL Save(const C *flnm) { return SvDir(AtomList(),flnm,-1,true); } - BL LdDirXML(const AtomList &d,const C *flnm,I depth,BL mkdir = true); - BL SvDirXML(const AtomList &d,const C *flnm,I depth,BL absdir); - BL LoadXML(const C *flnm) { return LdDirXML(AtomList(),flnm,-1); } - BL SaveXML(const C *flnm) { return SvDirXML(AtomList(),flnm,-1,true); } - - I refs; - const S *sym; - pooldata *nxt; - - pooldir root; - -private: - static const A nullatom; -}; - -#endif |