aboutsummaryrefslogtreecommitdiff
path: root/externals/grill/flext/source/fllib.cpp
diff options
context:
space:
mode:
authorThomas Grill <xovo@users.sourceforge.net>2005-05-23 16:52:46 +0000
committerThomas Grill <xovo@users.sourceforge.net>2005-05-23 16:52:46 +0000
commita1c2bb17663ce4dea2f5e7e3c1e1bfae35541a2c (patch)
tree9000122288ab01e7d815323c79342f668d6b2a5b /externals/grill/flext/source/fllib.cpp
parenta98acaeb0ce114ede2cfd31267c6dcc3fc0fbb01 (diff)
oops, fix
Max/MSP has its own check.... changed initialization functions accordingly better timers for Windows fixed timer bug changed template parameter of TableMap compiler flag for MinGW binary compatibility (thanks to GG) enable WIN2000/XP API features with definition in build system fix for symbol messages into non-left inlets restructured TableMap type (doesn't own pointers any more) no sanity check for iterator fixes for MSVC6 slimmed object data structures better c++ compliance fixed problems with symbol binding svn path=/trunk/; revision=3074
Diffstat (limited to 'externals/grill/flext/source/fllib.cpp')
-rwxr-xr-xexternals/grill/flext/source/fllib.cpp63
1 files changed, 30 insertions, 33 deletions
diff --git a/externals/grill/flext/source/fllib.cpp b/externals/grill/flext/source/fllib.cpp
index 6b1ccb92..b28bda5a 100755
--- a/externals/grill/flext/source/fllib.cpp
+++ b/externals/grill/flext/source/fllib.cpp
@@ -100,40 +100,42 @@ bool flext::chktilde(const char *objname)
}
-
// this class stands for one registered object
// it holds the class, type flags, constructor and destructor of the object and the creation arg types
// it will never be destroyed
-class libclass:
+class flext_class:
public flext_root
{
public:
- libclass(t_class *&cl,flext_obj *(*newf)(int,t_atom *),void (*freef)(flext_hdr *));
+ flext_class(t_class *&cl,flext_obj *(*newf)(int,t_atom *),void (*freef)(flext_hdr *));
flext_obj *(*newfun)(int,t_atom *);
void (*freefun)(flext_hdr *c);
t_class *const &clss;
- bool lib,dsp,attr;
+ bool lib,dsp,attr,dist;
int argc;
int *argv;
+
+ flext_base::ItemCont meths,attrs;
};
-libclass::libclass(t_class *&cl,flext_obj *(*newf)(int,t_atom *),void (*freef)(flext_hdr *)):
- newfun(newf),freefun(freef),
+flext_class::flext_class(t_class *&cl,flext_obj *(*newf)(int,t_atom *),void (*freef)(flext_hdr *)):
clss(cl),
+ newfun(newf),freefun(freef),
argc(0),argv(NULL)
+ , dist(false)
{}
-typedef TablePtrMap<const t_symbol *,libclass *,8> LibMap;
+typedef TablePtrMap<const t_symbol *,flext_class *,8> LibMap;
static LibMap libnames;
//! Store or retrieve registered classes
-static libclass *FindName(const t_symbol *s,libclass *o = NULL)
+static flext_class *FindName(const t_symbol *s,flext_class *o = NULL)
{
- libclass *cl = libnames.find(s);
+ flext_class *cl = libnames.find(s);
if(!cl) libnames.insert(s,cl = o);
return cl;
}
@@ -144,14 +146,12 @@ static libclass *FindName(const t_symbol *s,libclass *o = NULL)
#if FLEXT_SYS == FLEXT_SYS_MAX
static t_class *lib_class = NULL;
static const t_symbol *lib_name = NULL;
+#endif
-flext_obj::t_classid flext_obj::thisClassId() const
-{
- return FindName(thisNameSym());
-}
+t_class *flext_obj::getClass(t_classid id) { return reinterpret_cast<flext_class *>(id)->clss; }
+
+bool flext_obj::HasAttributes() const { return clss->attr; }
-t_class *flext_obj::getClass(t_classid id) { return reinterpret_cast<libclass *>(id)->clss; }
-#endif
void flext_obj::lib_init(const char *name,void setupfun(),bool attr)
{
@@ -227,7 +227,7 @@ void flext_obj::obj_add(bool lib,bool dsp,bool attr,const char *idname,const cha
#endif
// make new dynamic object
- libclass *lo = new libclass(*cl,newfun,freefun);
+ flext_class *lo = new flext_class(*cl,newfun,freefun);
lo->lib = lib;
lo->dsp = dsp;
lo->attr = process_attributes;
@@ -258,12 +258,7 @@ void flext_obj::obj_add(bool lib,bool dsp,bool attr,const char *idname,const cha
}
// get unique class id
-#if FLEXT_SYS == FLEXT_SYS_PD || FLEXT_SYS == FLEXT_SYS_JMAX
- t_classid clid = lo->clss;
-#else
- // in Max/MSP the t_class *value can't be used because it's possible that's it's not yet set!!
t_classid clid = lo;
-#endif
// make help reference
flext_obj::DefineHelp(clid,idname,extract(names,-1),dsp);
@@ -276,7 +271,7 @@ void flext_obj::obj_add(bool lib,bool dsp,bool attr,const char *idname,const cha
// add to name list
const t_symbol *lsym = MakeSymbol(c);
- /*libclass *lcl =*/ FindName(lsym,lo);
+ FindName(lsym,lo);
#if FLEXT_SYS == FLEXT_SYS_PD
if(ix > 0)
@@ -327,7 +322,7 @@ flext_hdr *flext_obj::obj_new(const t_symbol *s,int _argc_,t_atom *argv)
{
flext_hdr *obj = NULL;
#endif
- libclass *lo = FindName(s);
+ flext_class *lo = FindName(s);
if(lo) {
bool ok = true;
t_atom args[NEWARGS];
@@ -391,24 +386,19 @@ flext_hdr *flext_obj::obj_new(const t_symbol *s,int _argc_,t_atom *argv)
if(ok) {
try {
- t_classid clid;
-
#if FLEXT_SYS == FLEXT_SYS_PD
- clid = lo->clss;
obj = (flext_hdr *)::pd_new(lo->clss);
#elif FLEXT_SYS == FLEXT_SYS_MAX
- clid = lo;
obj = (flext_hdr *)::newobject(lo->clss);
-#elif FLEXT_SYS == FLEXT_SYS_JMAX
- clid = lo->clss;
#else
#error
#endif
flext_obj::m_holder = obj;
+ flext_obj::m_holdclass = lo;
flext_obj::m_holdname = s;
- flext_obj::m_holdattr = lo->attr;
flext_obj::initing = true;
+ flext_obj::init_ok = true;
// get actual flext object (newfun calls "new flext_obj()")
if(lo->argc >= 0)
@@ -417,12 +407,12 @@ flext_hdr *flext_obj::obj_new(const t_symbol *s,int _argc_,t_atom *argv)
obj->data = lo->newfun(argc,argv);
flext_obj::m_holder = NULL;
+ flext_obj::m_holdclass = NULL;
flext_obj::m_holdname = NULL;
- flext_obj::m_holdattr = false;
ok = obj->data &&
// check constructor exit flag
- obj->data->InitOk();
+ flext_obj::init_ok;
if(ok) {
if(lo->attr) {
@@ -496,7 +486,7 @@ void flext_obj::obj_free(flext_hdr *h)
{
flext_hdr *hdr = (flext_hdr *)h;
const t_symbol *name = hdr->data->thisNameSym();
- libclass *lcl = FindName(name);
+ flext_class *lcl = FindName(name);
if(lcl) {
try {
@@ -531,3 +521,10 @@ void flext_obj::obj_free(flext_hdr *h)
}
+t_class *flext_obj::thisClass() const { FLEXT_ASSERT(x_obj); return thisClassId()->clss; }
+
+void flext_base::SetDist(t_classid c,bool d) { c->dist = d; }
+bool flext_base::DoDist() const { return thisClassId()->dist; }
+
+flext_base::ItemCont *flext_base::ClMeths(t_classid c) { return &c->meths; }
+flext_base::ItemCont *flext_base::ClAttrs(t_classid c) { return &c->attrs; }