Commit ff9fe0e2 authored by thomas's avatar thomas
Browse files

slimmed object data structures

changed initialization functions accordingly

git-svn-id: https://svn.grrrr.org/ext/trunk@1083 4d9ac71a-51e6-0310-8455-cad1006bcd31
parent 525f7543
......@@ -39,6 +39,7 @@ Version history:
- replaced memory-intensive STL maps by custom-made vector/map-monster (should be fast!)
- fixed bug for symbol messages into non-left inlets
- better timers for Windows
- slimmed down object data structures and changed initialization code accordingly
0.4.7:
- added flext::GetBool (just because flext::GetInt has been there for a while)
......
# Doxyfile 1.3.5
# Doxyfile 1.4.3
#---------------------------------------------------------------------------
# Project related configuration options
......@@ -6,6 +6,7 @@
PROJECT_NAME = flext
PROJECT_NUMBER = "version 0.5.0"
OUTPUT_DIRECTORY = c:/data/pdmax/flext/doc/
CREATE_SUBDIRS = NO
OUTPUT_LANGUAGE = English
USE_WINDOWS_ENCODING = YES
BRIEF_MEMBER_DESC = YES
......@@ -15,12 +16,14 @@ ALWAYS_DETAILED_SEC = NO
INLINE_INHERITED_MEMB = NO
FULL_PATH_NAMES = NO
STRIP_FROM_PATH =
STRIP_FROM_INC_PATH =
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO
DETAILS_AT_TOP = YES
INHERIT_DOCS = YES
DISTRIBUTE_GROUP_DOC = NO
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 8
ALIASES =
OPTIMIZE_OUTPUT_FOR_C = YES
......@@ -32,7 +35,8 @@ SUBGROUPING = YES
EXTRACT_ALL = NO
EXTRACT_PRIVATE = NO
EXTRACT_STATIC = NO
EXTRACT_LOCAL_CLASSES = YES
EXTRACT_LOCAL_CLASSES = NO
EXTRACT_LOCAL_METHODS = NO
HIDE_UNDOC_MEMBERS = YES
HIDE_UNDOC_CLASSES = YES
HIDE_FRIEND_COMPOUNDS = NO
......@@ -43,6 +47,8 @@ HIDE_SCOPE_NAMES = NO
SHOW_INCLUDE_FILES = YES
INLINE_INFO = YES
SORT_MEMBER_DOCS = YES
SORT_BRIEF_DOCS = NO
SORT_BY_SCOPE_NAME = NO
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
......@@ -50,6 +56,8 @@ GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES
SHOW_DIRECTORIES = YES
FILE_VERSION_FILTER =
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
......@@ -57,13 +65,15 @@ QUIET = NO
WARNINGS = YES
WARN_IF_UNDOCUMENTED = NO
WARN_IF_DOC_ERROR = YES
WARN_NO_PARAMDOC = NO
WARN_FORMAT = "$file:$line: $text"
WARN_LOGFILE =
#---------------------------------------------------------------------------
# configuration options related to the input files
#---------------------------------------------------------------------------
INPUT = c:/data/pdmax/flext/source/
FILE_PATTERNS =
FILE_PATTERNS = *.cpp \
*.h
RECURSIVE = NO
EXCLUDE =
EXCLUDE_SYMLINKS = NO
......@@ -73,6 +83,7 @@ EXAMPLE_PATTERNS =
EXAMPLE_RECURSIVE = NO
IMAGE_PATH =
INPUT_FILTER =
FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
#---------------------------------------------------------------------------
# configuration options related to source browsing
......@@ -82,6 +93,7 @@ INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES
USE_HTAGS = NO
VERBATIM_HEADERS = NO
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
......@@ -177,7 +189,7 @@ PREDEFINED = FLEXT_THREADS \
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration::addtions related to external references
# Configuration::additions related to external references
#---------------------------------------------------------------------------
TAGFILES =
GENERATE_TAGFILE =
......@@ -192,21 +204,25 @@ HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = NO
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
GROUP_GRAPHS = YES
UML_LOOK = NO
TEMPLATE_RELATIONS = YES
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
CALL_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
DOT_PATH =
DOTFILE_DIRS =
MAX_DOT_GRAPH_WIDTH = 1024
MAX_DOT_GRAPH_HEIGHT = 1024
MAX_DOT_GRAPH_DEPTH = 0
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES
DOT_CLEANUP = YES
#---------------------------------------------------------------------------
# Configuration::addtions related to the search engine
# Configuration::additions related to the search engine
#---------------------------------------------------------------------------
SEARCHENGINE = NO
......@@ -97,7 +97,7 @@ void flext_base::AddAttrib(ItemCont *aa,ItemCont *ma,const t_symbol *asym,methar
void flext_base::AddAttrib(const t_symbol *attr,metharg tp,methfun gfun,methfun sfun)
{
if(procattr)
if(HasAttributes())
AddAttrib(ThAttrs(),ThMeths(),attr,tp,gfun,sfun);
else
error("%s - attribute procession is not enabled!",thisName());
......@@ -112,6 +112,7 @@ void flext_base::ListAttrib(AtomList &la) const
{
typedef TablePtrMap<int,const t_symbol *,32> AttrList;
AttrList list[2];
ItemCont *clattrhead = ClAttrs(thisClassId());
int i;
for(i = 0; i <= 1; ++i) {
......@@ -191,7 +192,7 @@ bool flext_base::InitAttrib(int argc,const t_atom *argv)
bool flext_base::ListAttrib() const
{
if(procattr) {
if(HasAttributes()) {
// defined in flsupport.cpp
extern const t_symbol *sym_attributes;
......@@ -206,6 +207,8 @@ bool flext_base::ListAttrib() const
flext_base::AttrItem *flext_base::FindAttrib(const t_symbol *tag,bool get,bool msg) const
{
ItemCont *clattrhead = ClAttrs(thisClassId());
// first search within object scope
AttrItem *a = NULL;
{
......@@ -401,6 +404,8 @@ bool flext_base::BangAttrib(const t_symbol *attr)
bool flext_base::BangAttribAll()
{
ItemCont *clattrhead = ClAttrs(thisClassId());
for(int i = 0; i <= 1; ++i) {
ItemCont *a = i?attrhead:clattrhead;
if(a) {
......
......@@ -41,16 +41,17 @@ static t_widgetbehavior widgetbehavior;
void flext_base::SetGfx(t_classid c)
{
t_class *cl = getClass(c);
// widgetbehavior struct MUST be resident... (static is just ok here)
#ifndef FLEXT_CLONEWIDGET
widgetbehavior.w_visfn = c->c_wb->w_visfn;
widgetbehavior.w_selectfn = c->c_wb->w_selectfn;
widgetbehavior.w_getrectfn = c->c_wb->w_getrectfn;
widgetbehavior.w_displacefn = c->c_wb->w_displacefn;
widgetbehavior.w_activatefn = c->c_wb->w_activatefn;
widgetbehavior.w_deletefn = c->c_wb->w_deletefn;
widgetbehavior.w_selectfn = c->c_wb->w_selectfn;
widgetbehavior.w_visfn = cl->c_wb->w_visfn;
widgetbehavior.w_selectfn = cl->c_wb->w_selectfn;
widgetbehavior.w_getrectfn = cl->c_wb->w_getrectfn;
widgetbehavior.w_displacefn = cl->c_wb->w_displacefn;
widgetbehavior.w_activatefn = cl->c_wb->w_activatefn;
widgetbehavior.w_deletefn = cl->c_wb->w_deletefn;
widgetbehavior.w_selectfn = cl->c_wb->w_selectfn;
#else
widgetbehavior.w_visfn = text_widgetbehavior.w_visfn;
widgetbehavior.w_selectfn = text_widgetbehavior.w_selectfn;
......@@ -66,7 +67,7 @@ void flext_base::SetGfx(t_classid c)
#endif // FLEXT_NOATTREDIT
widgetbehavior.w_clickfn = cb_click;
class_setwidget(c, &widgetbehavior);
class_setwidget(cl, &widgetbehavior);
}
......@@ -446,17 +447,18 @@ static void tclscript()
void flext_base::attrsetup(t_classid c)
{
t_class *cl = getClass(c);
#ifndef FLEXT_CLONEWIDGET
ori_vis = c->c_wb->w_visfn;
ori_select = c->c_wb->w_selectfn;
ori_vis = cl->c_wb->w_visfn;
ori_select = cl->c_wb->w_selectfn;
#endif
widgetbehavior.w_visfn = cb_GfxVis;
widgetbehavior.w_selectfn = cb_GfxSelect;
#if PD_MINOR_VERSION >= 37
class_setpropertiesfn(c,cb_GfxProperties);
class_setsavefn(c,cb_GfxSave);
class_setpropertiesfn(cl,cb_GfxProperties);
class_setsavefn(cl,cb_GfxSave);
#else
widgetbehavior.w_propertiesfn = cb_GfxProperties;
widgetbehavior.w_savefn = cb_GfxSave;
......
......@@ -40,13 +40,14 @@ WARRANTIES, see the file, "license.txt," in this distribution.
flext_hdr *flext_obj::m_holder = NULL;
const t_symbol *flext_obj::m_holdname = NULL;
bool flext_obj::m_holdattr = false;
flext_class *flext_obj::m_holdclass = NULL;
int flext_obj::m_holdaargc = 0;
const t_atom *flext_obj::m_holdaargv = NULL;
bool flext_obj::process_attributes = false;
bool flext_obj::initing = false;
bool flext_obj::exiting = false;
bool flext_obj::init_ok;
void flext_obj::ProcessAttributes(bool attr) { process_attributes = attr; }
......@@ -56,8 +57,7 @@ void flext_obj::ProcessAttributes(bool attr) { process_attributes = attr; }
/////////////////////////////////////////////////////////
flext_obj :: FLEXT_CLASSDEF(flext_obj)()
: x_obj(m_holder)
, procattr(m_holdattr)
, init_ok(true)
, clss(m_holdclass)
, m_name(m_holdname)
{
#if FLEXT_SYS == FLEXT_SYS_PD
......@@ -72,7 +72,8 @@ flext_obj :: FLEXT_CLASSDEF(flext_obj)()
// Destructor
//
/////////////////////////////////////////////////////////
flext_obj :: ~FLEXT_CLASSDEF(flext_obj)() {
flext_obj :: ~FLEXT_CLASSDEF(flext_obj)()
{
x_obj = NULL;
}
......
......@@ -64,6 +64,8 @@ struct FLEXT_SHARE flext_hdr
};
class flext_class;
// ----------------------------------------------------------------------------
/*! \brief The mother of base classes for all flext external objects
......@@ -110,7 +112,7 @@ class FLEXT_SHARE FLEXT_CLASSDEF(flext_obj):
/*! \brief Signal a construction problem
\note This should only be used in the constructor. Object creation will be aborted.
*/
void InitProblem() { init_ok = false; }
static void InitProblem() { init_ok = false; }
/*! \brief Enable/disable attribute procession (default = false)
\note Use that in the static class setup function (also library setup function)
......@@ -145,34 +147,19 @@ class FLEXT_SHARE FLEXT_CLASSDEF(flext_obj):
const char *thisName() const { return GetString(m_name); }
//! Get the class name (as a symbol)
const t_symbol *thisNameSym() const { return m_name; }
//! Get the class pointer
#if FLEXT_SYS == FLEXT_SYS_PD
t_class *thisClass() const { FLEXT_ASSERT(x_obj); return (t_class *)((t_object *)(x_obj))->te_g.g_pd; }
#elif FLEXT_SYS == FLEXT_SYS_MAX
t_class *thisClass() const { FLEXT_ASSERT(x_obj); return (t_class *)(((t_tinyobject *)x_obj)->t_messlist-1); }
#elif FLEXT_SYS == FLEXT_SYS_JMAX
t_class *thisClass() const { return fts_object_get_class((fts_object_t *)thisHdr()); }
#else
#error
#endif
#if FLEXT_SYS == FLEXT_SYS_PD || FLEXT_SYS == FLEXT_SYS_JMAX
t_class *thisClass() const;
//! Typedef for unique class identifier
typedef t_class *t_classid;
typedef flext_class *t_classid;
//! Get unique id for object class
t_classid thisClassId() const { return thisClass(); }
//! Get class pointer from class id
static t_class *getClass(t_classid c) { return c; }
#else
//! Typedef for unique class identifier
typedef void *t_classid;
//! Get unique id for object class (for Max/MSP library object share the same (t_class *)!)
t_classid thisClassId() const;
t_classid thisClassId() const { return clss; }
//! Get class pointer from class id
static t_class *getClass(t_classid);
#endif
bool HasAttributes() const;
//! @} FLEXT_O_INFO
......@@ -202,14 +189,14 @@ class FLEXT_SHARE FLEXT_CLASSDEF(flext_obj):
*/
protected:
//! The object header
mutable flext_hdr *x_obj;
//! Flag for attribute procession
bool procattr;
//! pointer to flext class definition
flext_class *clss;
//! backpointer to object header
mutable flext_hdr *x_obj;
static bool process_attributes;
static bool process_attributes;
private:
......@@ -217,7 +204,7 @@ class FLEXT_SHARE FLEXT_CLASSDEF(flext_obj):
mutable t_canvas *m_canvas;
//! Flag for successful object construction
bool init_ok;
static bool init_ok;
// flags for init and exit procedure;
static bool initing;
......@@ -232,20 +219,20 @@ class FLEXT_SHARE FLEXT_CLASSDEF(flext_obj):
\warning don't touch it!
*/
static flext_hdr *m_holder;
//! Hold object's class during construction
static flext_class *m_holdclass;
//! Hold object's name during construction
static const t_symbol *m_holdname;
//! Holders for attribute procession flag
static bool m_holdattr;
static int m_holdaargc;
static const t_atom *m_holdaargv;
//! The object's name in the patcher
/*! The object's name in the patcher
\note objects of the same class can have various alias names!
*/
const t_symbol *m_name;
//! Check whether construction was successful
bool InitOk() const { return init_ok; }
/*! Return true if in object initialization phase
true when in constructor or Init, false when in Finalize
*/
......@@ -575,7 +562,3 @@ FLEXT_OBJ_SETUP(NEW_CLASS,DSP,LIB)
#endif
......@@ -60,9 +60,6 @@ class FLEXT_SHARE FLEXT_CLASSDEF(flext_base):
friend class FLEXT_SHARE FLEXT_CLASSDEF(flext_obj);
/*! \defgroup FLEXT_CLASS Flext base class
@{
*/
public:
/*! \defgroup FLEXT_C_BASE Basic class functionality
......@@ -121,61 +118,61 @@ public:
// argument m specifies multiple inlet/outlet count
// void AddInDef() { AddInlet(xlet::tp_def,1); }
// void AddInDef() { AddInlet(xlet_def,1); }
/*! \brief Add inlet(s) for anythings
\remark That's the one to choose for the left-most (first) inlet unless it's a signal inlet.
*/
void AddInAnything(int m = 1) { AddInlet(xlet::tp_any,m); }
void AddInAnything(int m = 1) { AddInlet(xlet_any,m); }
/*! \brief Add inlet(s) for anythings (with description)
\remark That's the one to choose for the left-most (first) inlet unless it's a signal inlet.
*/
void AddInAnything(const char *desc,int m = 1) { AddInlet(xlet::tp_any,m,desc); }
void AddInAnything(const char *desc,int m = 1) { AddInlet(xlet_any,m,desc); }
//! Add inlet(s) for floats
void AddInFloat(int m = 1) { AddInlet(xlet::tp_float,m); }
void AddInFloat(int m = 1) { AddInlet(xlet_float,m); }
//! Add inlet(s) for floats (with description)
void AddInFloat(const char *desc,int m = 1) { AddInlet(xlet::tp_float,m,desc); }
void AddInFloat(const char *desc,int m = 1) { AddInlet(xlet_float,m,desc); }
//! Add inlet(s) for integers
void AddInInt(int m = 1) { AddInlet(xlet::tp_int,m); }
void AddInInt(int m = 1) { AddInlet(xlet_int,m); }
//! Add inlet(s) for integers (with description)
void AddInInt(const char *desc,int m = 1) { AddInlet(xlet::tp_int,m,desc); }
void AddInInt(const char *desc,int m = 1) { AddInlet(xlet_int,m,desc); }
//! Add inlet(s) for symbols
void AddInSymbol(int m = 1) { AddInlet(xlet::tp_sym,m); }
void AddInSymbol(int m = 1) { AddInlet(xlet_sym,m); }
//! Add inlet(s) for symbol (with description)
void AddInSymbol(const char *desc,int m = 1) { AddInlet(xlet::tp_sym,m,desc); }
void AddInSymbol(const char *desc,int m = 1) { AddInlet(xlet_sym,m,desc); }
//! Add inlet(s) for bang
void AddInBang(int m = 1) { AddInlet(xlet::tp_sym,m); }
void AddInBang(int m = 1) { AddInlet(xlet_sym,m); }
//! Add inlet(s) for bangs (with description)
void AddInBang(const char *desc,int m = 1) { AddInlet(xlet::tp_sym,m,desc); }
void AddInBang(const char *desc,int m = 1) { AddInlet(xlet_sym,m,desc); }
//! Add inlet(s) for lists
void AddInList(int m = 1) { AddInlet(xlet::tp_list,m); }
void AddInList(int m = 1) { AddInlet(xlet_list,m); }
//! Add inlet(s) for lists (with description)
void AddInList(const char *desc,int m = 1) { AddInlet(xlet::tp_list,m,desc); }
void AddInList(const char *desc,int m = 1) { AddInlet(xlet_list,m,desc); }
//! Add outlet(s) for anythings
void AddOutAnything(int m = 1) { AddOutlet(xlet::tp_any,m); }
void AddOutAnything(int m = 1) { AddOutlet(xlet_any,m); }
//! Add outlet(s) for anythings (with description)
void AddOutAnything(const char *desc,int m = 1) { AddOutlet(xlet::tp_any,m,desc); }
void AddOutAnything(const char *desc,int m = 1) { AddOutlet(xlet_any,m,desc); }
//! Add outlet(s) for floats
void AddOutFloat(int m = 1) { AddOutlet(xlet::tp_float,m); }
void AddOutFloat(int m = 1) { AddOutlet(xlet_float,m); }
//! Add outlet(s) for floats (with description)
void AddOutFloat(const char *desc,int m = 1) { AddOutlet(xlet::tp_float,m,desc); }
void AddOutFloat(const char *desc,int m = 1) { AddOutlet(xlet_float,m,desc); }
//! Add outlet(s) for integers
void AddOutInt(int m = 1) { AddOutlet(xlet::tp_int,m); }
void AddOutInt(int m = 1) { AddOutlet(xlet_int,m); }
//! Add outlet(s) for integers (with description)
void AddOutInt(const char *desc,int m = 1) { AddOutlet(xlet::tp_int,m,desc); }
void AddOutInt(const char *desc,int m = 1) { AddOutlet(xlet_int,m,desc); }
//! Add outlet(s) for symbols
void AddOutSymbol(int m = 1) { AddOutlet(xlet::tp_sym,m); }
void AddOutSymbol(int m = 1) { AddOutlet(xlet_sym,m); }
//! Add outlet(s) for symbols (with description)
void AddOutSymbol(const char *desc,int m = 1) { AddOutlet(xlet::tp_sym,m,desc); }
void AddOutSymbol(const char *desc,int m = 1) { AddOutlet(xlet_sym,m,desc); }
//! Add outlet(s) for bangs
void AddOutBang(int m = 1) { AddOutlet(xlet::tp_sym,m); }
void AddOutBang(int m = 1) { AddOutlet(xlet_sym,m); }
//! Add outlet(s) for bangs (with description)
void AddOutBang(const char *desc,int m = 1) { AddOutlet(xlet::tp_sym,m,desc); }
void AddOutBang(const char *desc,int m = 1) { AddOutlet(xlet_sym,m,desc); }
//! Add outlet(s) for lists
void AddOutList(int m = 1) { AddOutlet(xlet::tp_list,m); }
void AddOutList(int m = 1) { AddOutlet(xlet_list,m); }
//! Add outlet(s) for lists (with description)
void AddOutList(const char *desc,int m = 1) { AddOutlet(xlet::tp_list,m,desc); }
void AddOutList(const char *desc,int m = 1) { AddOutlet(xlet_list,m,desc); }
//! \deprecated inlets and outlets are now set up automatically
bool SetupInOut() { return true; }
......@@ -196,10 +193,10 @@ public:
int CntOutSig() const { return outsigs; }
//! Check if we are in DSP time
bool InDsp() const { return indsp; }
static bool InDsp() { return indsp; }
//! Retrieve currently processed message tag (NULL if no message processing)
const t_symbol *thisTag() const { return curtag; }
static const t_symbol *thisTag() { return curtag; }
#if FLEXT_SYS == FLEXT_SYS_PD || FLEXT_SYS == FLEXT_SYS_MAX
class outlet;
......@@ -207,7 +204,7 @@ public:
//! Get pointer to outlet (not in the constructor!)
outlet *GetOut(int ix) const { return outlets[ix]; }
#endif
int GetOutAttr() const { return procattr?CntOut():0; }
int GetOutAttr() const { return HasAttributes()?CntOut():0; }
//! @} FLEXT_C_IO_MISC
......@@ -377,7 +374,10 @@ public:
void AddMethod(int inlet,const char *tag,bool (*m)(flext_base *,int &)) { AddMethod(inlet,MakeSymbol(tag),m); }
//! Set Max/MSP style of distributing list elements over (message) inlets
void SetDist(bool d = true) { distmsgs = d; }
static void SetDist(t_classid c,bool d = true);
//! Query whether lists are distributed
bool DoDist() const;
//! @} FLEXT_C_ADDMETHOD
......@@ -515,22 +515,13 @@ protected:
*/
virtual bool Init();
//! \brief This represents either an inlet or outlet
struct xlet {
enum type {
tp_none = 0,
tp_float,tp_int,tp_sym,tp_list,tp_any,
tp_LIST,tp_ANY, // use AtomList and AtomAnything
tp_sig
};
xlet(type t,const char *desc = NULL);
~xlet();
char *desc;
type tp;
xlet *nxt;
};
enum xlettype {
xlet_none = 0,
xlet_float,xlet_int,xlet_sym,xlet_list,xlet_any,
xlet_LIST,xlet_ANY, // use AtomList and AtomAnything
xlet_sig
};
/*! \defgroup FLEXT_C_ATTR Attribute handling methods (object scope)
@{
......@@ -605,7 +596,7 @@ protected:
*/
//! \brief get a code for a list of inlets or outlets
unsigned long XletCode(xlet::type tp = xlet::tp_none,...); // end list with 0 (= tp_none) !!
unsigned long XletCode(xlettype tp = xlettype::xlet_none,...); // end list with 0 (= tp_none) !!
/*! \brief Add some inlets by a special code representing the types
\remark use XletCode function to get code value
......@@ -613,7 +604,7 @@ protected:
void AddInlets(unsigned long code);
//! \brief Add one or more inlet(s)
void AddInlet(xlet::type tp,int mult = 1,const char *desc = NULL) { AddXlet(tp,mult,desc,inlist); }
void AddInlet(xlettype tp,int mult = 1,const char *desc = NULL);
/*! \brief Add some inlets by a special code representing the types
\remark use XletCode function to get code value
......@@ -621,13 +612,13 @@ protected:
void AddOutlets(unsigned long code);
//! \brief Add one or more outlet(s)
void AddOutlet(xlet::type tp,int mult = 1,const char *desc = NULL) { AddXlet(tp,mult,desc,outlist); }
void AddOutlet(xlettype tp,int mult = 1,const char *desc = NULL);
//! \brief Set the description of an indexed inlet
void DescInlet(int ix,const char *desc) { DescXlet(ix,desc,inlist); }
void DescInlet(int ix,const char *desc);
//! \brief Set the description of an indexed outlet
void DescOutlet(int ix,const char *desc) { DescXlet(ix,desc,outlist); }
void DescOutlet(int ix,const char *desc);
//! @} FLEXT_C_INOUT
......@@ -650,15 +641,6 @@ protected:
Item *nxt;
};
/*
class ItemSet:
public DataMap<const t_symbol *,Item *>
{
public:
ItemSet();
~ItemSet();
};
*/
class ItemSet
:public TablePtrMap<const t_symbol *,Item *,8>
{
......@@ -772,15 +754,6 @@ protected:
int flags;
};
/*
class AttrDataCont:
public DataMap<const t_symbol *,AttrData *>
{
public:
AttrDataCont();
~AttrDataCont();
};
*/
class AttrDataCont
:public TablePtrMap<const t_symbol *,AttrData *,8>
{
......@@ -810,9 +783,6 @@ protected:
void ToSysBool(int n,bool f) const { ToSysInt(n,f?1:0); }
void ToSysAtom(int n,const t_atom &at) const;
// flag if we are within DSP
bool indsp;
private:
class pxbnd_object;
public:
......@@ -831,35 +801,49 @@ public:
pxbnd_object *px;
};