[PD-cvs] externals/grill/dynext/src main.cpp,1.7,1.8
Thomas Grill
xovo at users.sourceforge.net
Mon Apr 18 17:08:20 CEST 2005
Update of /cvsroot/pure-data/externals/grill/dynext/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29172/src
Modified Files:
main.cpp
Log Message:
fixed several problems with sub-patchers and connecting
enabled reuse of object names
introduced attributes for symbol reuse and canvas messages
Index: main.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/dynext/src/main.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** main.cpp 16 Apr 2005 21:36:30 -0000 1.7
--- main.cpp 18 Apr 2005 15:08:14 -0000 1.8
***************
*** 77,86 ****
};
! typedef TablePtrMapOwned<const t_symbol *,Obj *> ObjMap;
! ObjMap root;
typedef TablePtrMap<Obj *,const t_symbol *> GObjMap;
! typedef TablePtrMapOwned<t_glist *,GObjMap *> GLstMap;
! GLstMap groot;
Obj *Find(const t_symbol *n) { return root.find(n); }
--- 77,107 ----
};
! class ObjMap
! :public TablePtrMap<const t_symbol *,Obj *>
! {
! public:
! virtual ~ObjMap() { clear(); }
!
! virtual void clear()
! {
! for(iterator it(*this); it; ++it) delete it.data();
! TablePtrMap<const t_symbol *,Obj *>::clear();
! }
! } root;
typedef TablePtrMap<Obj *,const t_symbol *> GObjMap;
!
! class GLstMap
! :public TablePtrMap<t_glist *,GObjMap *>
! {
! public:
! virtual ~GLstMap() { clear(); }
!
! virtual void clear()
! {
! for(iterator it(*this); it; ++it) delete it.data();
! TablePtrMap<t_glist *,GObjMap *>::clear();
! }
! } groot;
Obj *Find(const t_symbol *n) { return root.find(n); }
***************
*** 114,118 ****
t_sample defsig;
! void init(dyn *t);
static void px_exit(proxy *px) { if(px->buf) FreeAligned(px->buf); }
--- 135,144 ----
t_sample defsig;
! void init(dyn *t)
! {
! th = t;
! n = 0,buf = NULL;
! defsig = 0;
! }
static void px_exit(proxy *px) { if(px->buf) FreeAligned(px->buf); }
***************
*** 172,176 ****
int m_inlets,s_inlets,m_outlets,s_outlets;
t_canvas *canvas;
! bool stripext;
private:
--- 198,202 ----
int m_inlets,s_inlets,m_outlets,s_outlets;
t_canvas *canvas;
! bool stripext,canvasmsg,symreuse;
private:
***************
*** 190,193 ****
--- 216,221 ----
FLEXT_ATTRVAR_B(stripext)
+ FLEXT_ATTRVAR_B(symreuse)
+ FLEXT_ATTRVAR_B(canvasmsg)
static const t_symbol *sym_dot,*sym_dynsin,*sym_dynsout,*sym_dynin,*sym_dynout,*sym_dyncanvas;
***************
*** 261,264 ****
--- 289,294 ----
FLEXT_CADDATTR_VAR(c,"vis",mg_vis,ms_vis);
FLEXT_CADDATTR_VAR1(c,"stripext",stripext);
+ FLEXT_CADDATTR_VAR1(c,"symreuse",symreuse);
+ FLEXT_CADDATTR_VAR1(c,"canvasmsg",canvasmsg);
// set up symbols
***************
*** 308,312 ****
canvas(NULL),
pxin(NULL),pxout(NULL),
! stripext(false)
{
if(argc < 4) {
--- 338,342 ----
canvas(NULL),
pxin(NULL),pxout(NULL),
! stripext(false),symreuse(true),canvasmsg(false)
{
if(argc < 4) {
***************
*** 446,449 ****
--- 476,537 ----
}
+ bool dyn::Add(const t_symbol *n,t_glist *gl,t_gobj *o)
+ {
+ // remove previous name entry
+ Obj *prv = Remove(n);
+ if(prv) delete prv;
+
+ // get canvas map
+ GObjMap *gm = groot.find(gl);
+ // if none existing create one
+ if(!gm) return false;
+
+ // insert object to canvas map
+ Obj *obj = new Obj(gl,o);
+ gm->insert(obj,n);
+ // insert object to object map
+ root.insert(n,obj);
+
+ t_glist *nl = obj->AsGlist();
+ if(nl) {
+ FLEXT_ASSERT(!groot.find(nl));
+ groot.insert(nl,new GObjMap);
+ }
+
+ return true;
+ }
+
+ dyn::Obj *dyn::Remove(const t_symbol *n)
+ {
+ // see if there's already an object of the same name
+ Obj *prv = root.remove(n);
+ if(prv) {
+ t_glist *pl = prv->glist;
+ // get canvas map
+ GObjMap *gm = groot.find(pl);
+ FLEXT_ASSERT(gm);
+ // remove object from canvas map
+ gm->remove(prv);
+
+ // non-NULL if object itself is a glist
+ t_glist *gl = prv->AsGlist();
+ if(gl) {
+ GObjMap *gm = groot.remove(gl);
+ // if it's a loaded abstraction it need not be in our list
+ if(gm) {
+ // remove all objects in canvas map
+ for(GObjMap::iterator it(*gm); it; ++it) {
+ Obj *r = Remove(it.data());
+ FLEXT_ASSERT(r);
+ delete r;
+ }
+ // delete canvas map
+ delete gm;
+ }
+ }
+ }
+ return prv;
+ }
+
t_gobj *dyn::New(const t_symbol *kind,int _argc_,const t_atom *_argv_,bool add)
{
***************
*** 478,481 ****
--- 566,571 ----
if(name == sym_dot)
err = ". cannot be redefined";
+ else if(!symreuse && root.find(name))
+ err = "Name already in use";
else if(!canv || !(glist = FindCanvas(canv)))
err = "Canvas could not be found";
***************
*** 556,617 ****
}
- dyn::Obj *dyn::Remove(const t_symbol *n)
- {
- // see if there's already an object of the same name
- Obj *prv = root.remove(n);
- if(prv) {
- t_glist *pl = prv->glist;
- // get canvas map
- GObjMap *gm = groot.find(pl);
- FLEXT_ASSERT(gm);
- // remove object from canvas map
- gm->erase(prv);
-
- // non-NULL if object itself is a glist
- t_glist *gl = prv->AsGlist();
- if(gl) {
- GObjMap *gm = groot.remove(gl);
- // if it's a loaded abstraction it need not be in our list
- if(gm) {
- // remove all objects in canvas map
- for(GObjMap::iterator it(*gm); it; ++it) {
- Obj *r = Remove(it.data());
- FLEXT_ASSERT(r);
- delete r;
- }
- // delete canvas map
- delete gm;
- }
- }
- }
- return prv;
- }
-
- bool dyn::Add(const t_symbol *n,t_glist *gl,t_gobj *o)
- {
- // remove previous name entry
- Obj *prv = Remove(n);
- if(prv) delete prv;
-
- // get canvas map
- GObjMap *gm = groot.find(gl);
- // if none existing create one
- if(!gm) return false;
-
- // insert object to canvas map
- Obj *obj = new Obj(gl,o);
- gm->insert(obj,n);
- // insert object to object map
- root.insert(n,obj);
-
- t_glist *nl = obj->AsGlist();
- if(nl) {
- FLEXT_ASSERT(!groot.find(nl));
- groot.insert(nl,new GObjMap);
- }
-
- return true;
- }
-
void dyn::m_reload()
{
--- 646,649 ----
***************
*** 791,795 ****
if(!o)
post("%s - send: object \"%s\" not found",thisName(),GetString(argv[0]));
! else
pd_forwardmess((t_pd *)o->object,argc-1,(t_atom *)argv+1);
}
--- 823,829 ----
if(!o)
post("%s - send: object \"%s\" not found",thisName(),GetString(argv[0]));
! else if(!canvasmsg && o->AsGlist())
! post("%s - send: object \"%s\" is an abstraction, please create proxy",thisName(),GetString(argv[0]));
! else
pd_forwardmess((t_pd *)o->object,argc-1,(t_atom *)argv+1);
}
***************
*** 797,807 ****
- void dyn::proxy::init(dyn *t)
- {
- th = t;
- n = 0,buf = NULL;
- defsig = 0;
- }
-
void dyn::proxyin::dsp(proxyin *x,t_signal **sp)
{
--- 831,834 ----
***************
*** 862,864 ****
CopySamples(out[i],pxout[i]->buf,n);
}
-
--- 889,890 ----
More information about the Pd-cvs
mailing list