From c275b9ecc894ad21159f10873c39bb0195f01eb8 Mon Sep 17 00:00:00 2001 From: Thomas Grill Date: Tue, 13 May 2003 02:34:30 +0000 Subject: "" svn path=/trunk/; revision=615 --- externals/grill/flext/source/flbind.cpp | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'externals/grill/flext/source/flbind.cpp') diff --git a/externals/grill/flext/source/flbind.cpp b/externals/grill/flext/source/flbind.cpp index fe1846e2..53f041c6 100644 --- a/externals/grill/flext/source/flbind.cpp +++ b/externals/grill/flext/source/flbind.cpp @@ -77,6 +77,18 @@ flext_base::binditem::~binditem() } } +#if FLEXT_SYS == FLEXT_SYS_PD + //! Bind object to a symbol + bool flext_base::Bind(const t_symbol *sym) { pd_bind(&thisHdr()->ob_pd,const_cast(sym)); return true; } + //! Unbind object from a symbol + bool flext_base::Unbind(const t_symbol *sym) { pd_unbind(&thisHdr()->ob_pd,const_cast(sym)); return true; } +#elif FLEXT_SYS == FLEXT_SYS_MAX + //! Bind object to a symbol + bool flext_base::Bind(const t_symbol *sym) { if(sym->s_thing) return false; else { const_cast(sym)->s_thing = (t_object *)thisHdr(); return true; } } + //! Unbind object from a symbol + bool flext_base::Unbind(const t_symbol *sym) { if(sym->s_thing != (t_object *)thisHdr()) return false; else { const_cast(sym)->s_thing = NULL; return true; } } +#endif + bool flext_base::BindMethod(const t_symbol *sym,bool (*fun)(flext_base *,t_symbol *s,int argc,t_atom *argv,void *data),void *data) { if(!bindhead) @@ -123,16 +135,18 @@ bool flext_base::BindMethod(const t_symbol *sym,bool (*fun)(flext_base *,t_symbo } -bool flext_base::UnbindMethod(const t_symbol *sym) +bool flext_base::UnbindMethod(const t_symbol *sym,void **data) { - item *it = bindhead?bindhead->Find(sym,0):NULL; + bool ok = false; + binditem *it = bindhead?(binditem *)bindhead->Find(sym,0):NULL; + void *d = NULL; if(it) { - bool ok = bindhead->Remove(it); + d = it->px->data; + ok = bindhead->Remove(it); if(ok) delete it; - return ok; } - else - return true; + if(data) *data = d; + return ok; } void flext_base::pxbnd_object::px_method(pxbnd_object *c,const t_symbol *s,int argc,t_atom *argv) -- cgit v1.2.1