[PD-cvs] externals/grill/flext/source flbind.cpp,1.10,1.11 flclass.h,1.38,1.39
xovo at users.sourceforge.net
xovo at users.sourceforge.net
Mon Oct 20 04:32:54 CEST 2003
Update of /cvsroot/pure-data/externals/grill/flext/source
In directory sc8-pr-cvs1:/tmp/cvs-serv2681/source
Modified Files:
flbind.cpp flclass.h
Log Message:
""
Index: flbind.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/flbind.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -d -r1.10 -r1.11
*** flbind.cpp 25 Jul 2003 02:32:45 -0000 1.10
--- flbind.cpp 20 Oct 2003 02:32:51 -0000 1.11
***************
*** 96,103 ****
else {
// Search for symbol
! if(bindhead->Find(sym,0)) {
! post("%s - Symbol already bound",thisName());
! return false;
! }
if(bindhead->Count() > 20) {
--- 96,108 ----
else {
// Search for symbol
! flext_base::BindItem *item = (flext_base::BindItem *)bindhead->Find(sym,0);
!
! // go through all items with matching tag
! for(; item && item->tag == sym; item = (flext_base::BindItem *)item->nxt)
! if(item->fun == fun) {
! // function already registered -> bail out!
! post("%s - Symbol already bound with this method",thisName());
! return false;
! }
if(bindhead->Count() > 20) {
***************
*** 154,163 ****
}
else {
! int sz = bindhead->Size();
if(!sz) sz = 1;
for(int i = 0; i < sz; ++i) {
for(it = (BindItem *)bindhead->GetItem(i); it; it = (BindItem *)it->nxt) {
! if(it->tag == sym && (!fun || it->fun == fun)) break;
}
if(it) break;
--- 159,170 ----
}
else {
! // any tag
!
! int sz = bindhead->Count();
if(!sz) sz = 1;
for(int i = 0; i < sz; ++i) {
for(it = (BindItem *)bindhead->GetItem(i); it; it = (BindItem *)it->nxt) {
! if(!fun || it->fun == fun) break;
}
if(it) break;
***************
*** 173,181 ****
}
bool flext_base::UnbindAll()
{
// bool memleak = false;
! int sz = bindhead->Size();
if(!sz) sz = 1;
--- 180,204 ----
}
+ bool flext_base::GetBoundMethod(const t_symbol *sym,bool (*fun)(flext_base *,t_symbol *s,int argc,t_atom *argv,void *data),void *&data)
+ {
+ if(bindhead) {
+ // Search for symbol
+ flext_base::BindItem *item = (flext_base::BindItem *)bindhead->Find(sym,0);
+
+ // go through all items with matching tag
+ for(; item && item->tag == sym; item = (flext_base::BindItem *)item->nxt)
+ if(item->fun == fun) {
+ data = item->px->data;
+ return true;
+ }
+ }
+ return false;
+ }
+
bool flext_base::UnbindAll()
{
// bool memleak = false;
! int sz = bindhead->Count();
if(!sz) sz = 1;
Index: flclass.h
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/flclass.h,v
retrieving revision 1.38
retrieving revision 1.39
diff -C2 -d -r1.38 -r1.39
*** flclass.h 24 Sep 2003 02:34:55 -0000 1.38
--- flclass.h 20 Oct 2003 02:32:51 -0000 1.39
***************
*** 438,441 ****
--- 438,448 ----
*/
bool UnbindMethod(const t_symbol *sym,bool (*meth)(flext_base *obj,t_symbol *sym,int argc,t_atom *argv,void *data) = NULL,void **data = NULL);
+ /*! \brief Get data of bound method of a symbol
+ \param sym Symbol to bind to
+ \param meth Function to bind
+ \param data Reference to returned user data
+ \return true on success (symbol/method combination was found)
+ */
+ bool GetBoundMethod(const t_symbol *sym,bool (*meth)(flext_base *obj,t_symbol *sym,int argc,t_atom *argv,void *data),void *&data);
//! \brief Bind a method to a symbol (as string)
***************
*** 443,446 ****
--- 450,455 ----
//! \brief Unbind a method from a symbol (as string)
bool UnbindMethod(const char *sym,bool (*meth)(flext_base *obj,t_symbol *sym,int argc,t_atom *argv,void *data) = NULL,void **data = NULL) { return UnbindMethod(MakeSymbol(sym),meth,data); }
+ //! \brief Get data of bound method of a symbol (as string)
+ bool GetBoundMethod(const char *sym,bool (*meth)(flext_base *obj,t_symbol *sym,int argc,t_atom *argv,void *data),void *&data) { return GetBoundMethod(MakeSymbol(sym),meth,data); }
/*! Unbind all symbol bindings
More information about the Pd-cvs
mailing list