From 97926eb08cf74f277e522ffb8c7f985457822de3 Mon Sep 17 00:00:00 2001 From: Thomas Grill Date: Tue, 11 Feb 2003 04:37:35 +0000 Subject: "" svn path=/trunk/; revision=388 --- externals/grill/pool/data.cpp | 77 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 70 insertions(+), 7 deletions(-) (limited to 'externals/grill/pool/data.cpp') diff --git a/externals/grill/pool/data.cpp b/externals/grill/pool/data.cpp index 4984129b..8d5d41c4 100644 --- a/externals/grill/pool/data.cpp +++ b/externals/grill/pool/data.cpp @@ -16,9 +16,9 @@ WARRANTIES, see the file, "license.txt," in this distribution. #include -pooldata::pooldata(const S *s): +pooldata::pooldata(const S *s,I vcnt,I dcnt): sym(s),nxt(NULL),refs(0), - root(nullatom,NULL) + root(nullatom,NULL,vcnt,dcnt) { LOG1("new pool %s",sym?flext_base::GetString(sym):""); } @@ -28,17 +28,18 @@ pooldata::~pooldata() LOG1("free pool %s",sym?flext_base::GetString(sym):""); } + const A pooldata::nullatom = { A_NULL }; V pooldata::Reset() { - root.Clear(true); + root.Reset(); } -BL pooldata::MkDir(const AtomList &d) +BL pooldata::MkDir(const AtomList &d,I vcnt,I dcnt) { - root.AddDir(d); + root.AddDir(d,vcnt,dcnt); return true; } @@ -117,6 +118,12 @@ I pooldata::GetAll(const AtomList &d,A *&keys,AtomList *&lst) } } +I pooldata::CntSub(const AtomList &d) +{ + pooldir *pd = root.GetDir(d); + return pd?pd->CntSub():0; +} + I pooldata::GetSub(const AtomList &d,const t_atom **&dirs) { pooldir *pd = root.GetDir(d); @@ -144,7 +151,7 @@ pooldir *pooldata::Copy(const AtomList &d,const A &key,BL cut) if(pd) { AtomList *val = pd->GetVal(key,cut); if(val) { - pooldir *ret = new pooldir(nullatom,NULL); + pooldir *ret = new pooldir(nullatom,NULL,pd->VSize(),pd->DSize()); ret->SetVal(key,val); return ret; } @@ -159,7 +166,8 @@ pooldir *pooldata::CopyAll(const AtomList &d,I depth,BL cut) { pooldir *pd = root.GetDir(d); if(pd) { - pooldir *ret = new pooldir(nullatom,NULL); + // What sizes should we choose here? + pooldir *ret = new pooldir(nullatom,NULL,pd->VSize(),pd->DSize()); if(pd->Copy(ret,depth,cut)) return ret; else { @@ -220,4 +228,59 @@ BL pooldata::SvDir(const AtomList &d,const C *flnm,I depth,BL absdir) return false; } +BL pooldata::LdDirXML(const AtomList &d,const C *flnm,I depth,BL mkdir) +{ + pooldir *pd = root.GetDir(d); + if(pd) { + C tmp[1024]; + const C *t = CnvFlnm(tmp,flnm,sizeof tmp); + if(t) { + ifstream fl(t); + BL ret = fl.good() != 0; + if(ret) { + fl.getline(tmp,sizeof tmp); + ret = !strncmp(tmp,"",6); + } + if(ret) + ret = pd->LdDirXML(fl,depth,mkdir); + return ret; + } + else return false; + } + else + return false; +} + +BL pooldata::SvDirXML(const AtomList &d,const C *flnm,I depth,BL absdir) +{ + pooldir *pd = root.GetDir(d); + if(pd) { + C tmp[1024]; + const C *t = CnvFlnm(tmp,flnm,sizeof tmp); + if(t) { + ofstream fl(t); + AtomList tmp; + if(absdir) tmp = d; + if(fl.good()) { + fl << "" << endl; + fl << "" << endl; + fl << "" << endl; + BL ret = pd->SvDirXML(fl,depth,tmp); + fl << "" << endl; + return ret; + } + } + else return false; + } + else + return false; +} + -- cgit v1.2.1