diff options
author | Thomas Grill <xovo@users.sourceforge.net> | 2005-03-13 04:59:47 +0000 |
---|---|---|
committer | Thomas Grill <xovo@users.sourceforge.net> | 2005-03-13 04:59:47 +0000 |
commit | 3ce0fb7e8ad57909fadcd4072817d69bc54e3a66 (patch) | |
tree | f4d4478420cc9f34bf26835f2edc5bd03f95a86b /externals/grill/py/source/pyext.h | |
parent | 0e0bfeecb60ffa25d997830553685482c666b7ba (diff) |
pydsp: share dsp buffer objects at inplace operation
DSP support for py/pyext: new objects pyext~,pyx~,pyext.~,pyx.~
new base class for py and pyext classes
preset sys.argv for module loading
support for buffer objects (preliminary)
py: bang in left inlet now really triggers without arguments
fixes for detached operation and single-threaded version
little restructuring
adjust pd and py files for correct argument passing
more optimizations
update for new flext callback naming
use lock count instead of message queuing to avoid py->py messaging deadlock
pyext: fix for inlet count
svn path=/trunk/; revision=2624
Diffstat (limited to 'externals/grill/py/source/pyext.h')
-rw-r--r-- | externals/grill/py/source/pyext.h | 63 |
1 files changed, 50 insertions, 13 deletions
diff --git a/externals/grill/py/source/pyext.h b/externals/grill/py/source/pyext.h index f94b2f19..3c6a86b5 100644 --- a/externals/grill/py/source/pyext.h +++ b/externals/grill/py/source/pyext.h @@ -13,14 +13,14 @@ WARRANTIES, see the file, "license.txt," in this distribution. #include "main.h" -class pyext: - public py +class pyext + : public pybase + , public flext_dsp { - FLEXT_HEADER_S(pyext,py,Setup) + FLEXT_HEADER_S(pyext,flext_dsp,Setup) public: - pyext(int argc,const t_atom *argv); - ~pyext(); + pyext(int argc,const t_atom *argv,bool sig = false); static PyObject *pyext__doc__(PyObject *,PyObject *args); static PyObject *pyext__init__(PyObject *,PyObject *args); @@ -38,21 +38,35 @@ public: static PyObject *pyext_stop(PyObject *,PyObject *args); static PyObject *pyext_isthreaded(PyObject *,PyObject *); + static PyObject *pyext_inbuf(PyObject *,PyObject *args); + static PyObject *pyext_invec(PyObject *,PyObject *args); + static PyObject *pyext_outbuf(PyObject *,PyObject *args); + static PyObject *pyext_outvec(PyObject *,PyObject *args); + int Inlets() const { return inlets; } int Outlets() const { return outlets; } protected: - virtual bool m_method_(int n,const t_symbol *s,int argc,const t_atom *argv); + + virtual bool Init(); + virtual void Exit(); + + virtual bool CbMethodResort(int n,const t_symbol *s,int argc,const t_atom *argv); + virtual void CbClick(); + virtual bool CbDsp(); + + virtual void DumpOut(const t_symbol *sym,int argc,const t_atom *argv); bool work(int n,const t_symbol *s,int argc,const t_atom *argv); + void m_help(); + void m_reload(); void m_reload_(int argc,const t_atom *argv); void ms_args(const AtomList &a) { m_reload_(a.Count(),a.Atoms()); } void m_dir_() { m__dir(pyobj); } void mg_dir_(AtomList &lst) { GetDir(pyobj,lst); } void m_doc_() { m__doc(((PyInstanceObject *)pyobj)->in_class->cl_dict); } - virtual void m_help(); void m_get(const t_symbol *s); void m_set(int argc,const t_atom *argv); @@ -60,23 +74,27 @@ protected: const t_symbol *methname; PyObject *pyobj; int inlets,outlets; + int siginlets,sigoutlets; + + virtual void Reload(); + virtual bool DoInit(); + virtual void DoExit(); + + virtual PyObject *GetSig(int ix,bool in); + + static pyext *GetThis(PyObject *self); private: static void Setup(t_classid); - static pyext *GetThis(PyObject *self); void SetThis(); void ClearBinding(); bool MakeInstance(); - bool DoInit(); - void DoExit(); void InitInOut(int &inlets,int &outlets); AtomList args; - virtual void Reload(); - static PyObject *class_obj,*class_dict; static PyMethodDef attr_tbl[],meth_tbl[]; static const char *pyext_doc; @@ -89,6 +107,7 @@ private: bool call(const char *meth,int inlet,const t_symbol *s,int argc,const t_atom *argv); + virtual bool thrcall(void *data); virtual bool callpy(PyObject *fun,PyObject *args); static bool stcallpy(PyObject *fun,PyObject *args); @@ -96,7 +115,9 @@ private: private: static bool boundmeth(flext_base *,t_symbol *sym,int argc,t_atom *argv,void *data); - + + FLEXT_CALLBACK(m_help) + FLEXT_CALLBACK(m_reload) FLEXT_CALLBACK_V(m_reload_) FLEXT_CALLBACK(m_dir_) @@ -108,6 +129,22 @@ private: FLEXT_CALLBACK_S(m_get) FLEXT_CALLBACK_V(m_set) + + // callbacks + FLEXT_ATTRVAR_I(detach) + FLEXT_ATTRVAR_B(respond) + FLEXT_CALLBACK_V(m_stop) + FLEXT_CALLBACK(m_dir) + FLEXT_CALLGET_V(mg_dir) + FLEXT_CALLBACK(m_doc) + +#ifdef FLEXT_THREADS + FLEXT_CALLBACK_T(tick) + FLEXT_THREAD(threadworker) + FLEXT_THREAD_X(work_wrapper) +#else + FLEXT_CALLBACK_X(work_wrapper) +#endif }; #endif |