diff options
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 |