778 lines · 30.0 KB · C
RawDownload
/*----------------------------------------------------------------------------  ChucK Concurrent, On-the-fly Audio Programming Language    Compiler and Virtual Machine   Copyright (c) 2004 Ge Wang and Perry R. Cook.  All rights reserved.    http://chuck.stanford.edu/    http://chuck.cs.princeton.edu/   This program is free software; you can redistribute it and/or modify  it under the terms of the GNU General Public License as published by  the Free Software Foundation; either version 2 of the License, or  (at your option) any later version.   This program is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  GNU General Public License for more details.   You should have received a copy of the GNU General Public License  along with this program; if not, write to the Free Software  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  U.S.A.-----------------------------------------------------------------------------*/ //-----------------------------------------------------------------------------// name: chuck_dl.h// desc: chuck dynamic linking header//// authors: Ge Wang (ge@ccrma.stanford.edu | gewang@cs.princeton.edu)//          Ari Lazier (alazier@cs.princeton.edu)//          Spencer Salazar (spencer@ccrma.stanford.edu)// mac os code based on apple's open source//// date: spring 2004 - 1.1//       spring 2005 - 1.2//-----------------------------------------------------------------------------#ifndef __CHUCK_DL_H__#define __CHUCK_DL_H__ #include "chuck_def.h"#include "chuck_oo.h"#include "chuck_carrier.h"#include <string>#include <vector>#include <map>  // major version must be the same between chuck:chugin#define CK_DLL_VERSION_MAJOR (0x0008)// minor version of chugin must be less than or equal to chuck's#define CK_DLL_VERSION_MINOR (0x0001)#define CK_DLL_VERSION_MAKE(maj,min) ((t_CKUINT)(((maj) << 16) | (min)))#define CK_DLL_VERSION_GETMAJOR(v) (((v) >> 16) & 0xFFFF)#define CK_DLL_VERSION_GETMINOR(v) ((v) & 0xFFFF)#define CK_DLL_VERSION (CK_DLL_VERSION_MAKE(CK_DLL_VERSION_MAJOR, CK_DLL_VERSION_MINOR))    extern char g_default_chugin_path[];extern char g_chugin_path_envvar[];   // forward referencesstruct Chuck_DL_Query;struct Chuck_DL_Class;struct Chuck_DL_Func;struct Chuck_DL_Value;struct Chuck_DL_Ctrl;union  Chuck_DL_Return;struct Chuck_DLL;struct Chuck_UGen;struct Chuck_UAna;struct Chuck_UAnaBlobProxy;struct Chuck_DL_MainThreadHook;namespace Chuck_DL_Api { struct Api; }  // param conversion - to extract values from ARGS to functions#define GET_CK_FLOAT(ptr)      (*(t_CKFLOAT *)ptr)#define GET_CK_SINGLE(ptr)     (*(float *)ptr)#define GET_CK_DOUBLE(ptr)     (*(double *)ptr)#define GET_CK_INT(ptr)        (*(t_CKINT *)ptr)#define GET_CK_UINT(ptr)       (*(t_CKUINT *)ptr)#define GET_CK_TIME(ptr)       (*(t_CKTIME *)ptr)#define GET_CK_DUR(ptr)        (*(t_CKDUR *)ptr)#define GET_CK_COMPLEX(ptr)    (*(t_CKCOMPLEX *)ptr)#define GET_CK_POLAR(ptr)      (*(t_CKPOLAR *)ptr)#define GET_CK_VEC3(ptr)       (*(t_CKVEC3 *)ptr)#define GET_CK_VEC4(ptr)       (*(t_CKVEC4 *)ptr)#define GET_CK_VECTOR(ptr)     (*(t_CKVECTOR *)ptr)#define GET_CK_OBJECT(ptr)     (*(Chuck_Object **)ptr)#define GET_CK_STRING(ptr)     (*(Chuck_String **)ptr)#define GET_CK_STRING_SAFE(ptr) std::string( GET_CK_STRING(ptr)->c_str() ) // param conversion with pointer advance#define GET_NEXT_FLOAT(ptr)    (*((t_CKFLOAT *&)ptr)++)#define GET_NEXT_SINGLE(ptr)   (*((float *&)ptr)++)#define GET_NEXT_DOUBLE(ptr)   (*((double *&)ptr)++)#define GET_NEXT_INT(ptr)      (*((t_CKINT *&)ptr)++)#define GET_NEXT_UINT(ptr)     (*((t_CKUINT *&)ptr)++)#define GET_NEXT_TIME(ptr)     (*((t_CKTIME *&)ptr)++)#define GET_NEXT_DUR(ptr)      (*((t_CKDUR *&)ptr)++)#define GET_NEXT_COMPLEX(ptr)  (*((t_CKCOMPLEX *&)ptr)++)#define GET_NEXT_POLAR(ptr)    (*((t_CKPOLAR *&)ptr)++)#define GET_NEXT_VEC3(ptr)     (*((t_CKVEC3 *&)ptr)++)#define GET_NEXT_VEC4(ptr)     (*((t_CKVEC4 *&)ptr)++)#define GET_NEXT_VECTOR(ptr)   (*((t_CKVECTOR *&)ptr)++)#define GET_NEXT_OBJECT(ptr)   (*((Chuck_Object **&)ptr)++)#define GET_NEXT_STRING(ptr)   (*((Chuck_String **&)ptr)++)#define GET_NEXT_STRING_SAFE(ptr) std::string( GET_NEXT_STRING(ptr)->c_str() ) // param conversion#define SET_CK_FLOAT(ptr,v)      (*(t_CKFLOAT *&)ptr=v)#define SET_CK_SINGLE(ptr,v)     (*(float *&)ptr=v)#define SET_CK_DOUBLE(ptr,v)     (*(double *&)ptr=v)#define SET_CK_INT(ptr,v)        (*(t_CKINT *&)ptr=v)#define SET_CK_UINT(ptr,v)       (*(t_CKUINT *&)ptr=v)#define SET_CK_TIME(ptr,v)       (*(t_CKTIME *&)ptr=v)#define SET_CK_DUR(ptr,v)        (*(t_CKDUR *&)ptr=v)#define SET_CK_VEC3(ptr,v)       (*(t_CKVEC3 *&)ptr=v)#define SET_CK_VEC4(ptr,v)       (*(t_CKVEC4 *&)ptr=v)#define SET_CK_VECTOR(ptr,v)     (*(t_CKVECTOR *&)ptr=v)#define SET_CK_STRING(ptr,v)     (*(Chuck_String **&)ptr=v) // param conversion with pointer advance#define SET_NEXT_FLOAT(ptr,v)    (*((t_CKFLOAT *&)ptr)++=v)#define SET_NEXT_SINGLE(ptr,v)   (*((float *&)ptr)++=v)#define SET_NEXT_DOUBLE(ptr,v)   (*((double *&)ptr)++=v)#define SET_NEXT_INT(ptr,v)      (*((t_CKINT *&)ptr)++=v)#define SET_NEXT_UINT(ptr,v)     (*((t_CKUINT *&)ptr)++=v)#define SET_NEXT_TIME(ptr,v)     (*((t_CKTIME *&)ptr)++=v)#define SET_NEXT_DUR(ptr,v)      (*((t_CKDUR *&)ptr)++=v)#define SET_NEXT_VEC3(ptr,v)     (*((t_CKVEC3 *&)ptr)++=v)#define SET_NEXT_VEC4(ptr,v)     (*((t_CKVEC4 *&)ptr)++=v)#define SET_NEXT_VECTOR(ptr,v)   (*((t_CKVECTOR *&)ptr)++=v)#define SET_NEXT_STRING(ptr,v)   (*((Chuck_String **&)ptr)++=v) // param conversion - to extract values from object's data segment#define OBJ_MEMBER_DATA(obj,offset)     (obj->data + offset)#define OBJ_MEMBER_FLOAT(obj,offset)    (*(t_CKFLOAT *)OBJ_MEMBER_DATA(obj,offset))#define OBJ_MEMBER_SINGLE(obj,offset)   (*(float *)OBJ_MEMBER_DATA(obj,offset))#define OBJ_MEMBER_DOUBLE(obj,offset)   (*(double *)OBJ_MEMBER_DATA(obj,offset))#define OBJ_MEMBER_INT(obj,offset)      (*(t_CKINT *)OBJ_MEMBER_DATA(obj,offset))#define OBJ_MEMBER_UINT(obj,offset)     (*(t_CKUINT *)OBJ_MEMBER_DATA(obj,offset))#define OBJ_MEMBER_TIME(obj,offset)     (*(t_CKTIME *)OBJ_MEMBER_DATA(obj,offset))#define OBJ_MEMBER_DUR(obj,offset)      (*(t_CKDUR *)OBJ_MEMBER_DATA(obj,offset))#define OBJ_MEMBER_VEC3(obj,offset)     (*(t_CKVEC3 *)OBJ_MEMBER_DATA(obj,offset))#define OBJ_MEMBER_VEC4(obj,offset)     (*(t_CKVEC4 *)OBJ_MEMBER_DATA(obj,offset))#define OBJ_MEMBER_VECTOR(obj,offset)   (*(t_CKVECTOR *)OBJ_MEMBER_DATA(obj,offset))#define OBJ_MEMBER_OBJECT(obj,offset)   (*(Chuck_Object **)OBJ_MEMBER_DATA(obj,offset))#define OBJ_MEMBER_STRING(obj,offset)   (*(Chuck_String **)OBJ_MEMBER_DATA(obj,offset))  // chuck dll export linkage and calling convention#if defined (__PLATFORM_WIN32__)  #define CK_DLL_LINKAGE extern "C" __declspec( dllexport )#else  #define CK_DLL_LINKAGE extern "C"#endif // calling convention of functions provided by chuck to the dll#if defined(__PLATFORM_WIN32__)  #define CK_DLL_CALL    _cdecl#else  #define CK_DLL_CALL#endif typedef const Chuck_DL_Api::Api *CK_DL_API; // macro for defining ChucK DLL export functions// example: CK_DLL_EXPORT(int) foo() { return 1; }#define CK_DLL_EXPORT(type) CK_DLL_LINKAGE type CK_DLL_CALL// macro for declaring version of ChucK DL a given DLL links to// example: CK_DLL_DECLVERSION#define CK_DLL_DECLVERSION CK_DLL_EXPORT(t_CKUINT) ck_version() { return CK_DLL_VERSION; }// naming convention for static query functions#define CK_DLL_QUERY_STATIC_NAME(name) ck_##name##_query// macro for defining ChucK DLL export query-functions (static version)#define CK_DLL_QUERY_STATIC(name) CK_DLL_EXPORT(t_CKBOOL) CK_DLL_QUERY_STATIC_NAME(name)( Chuck_DL_Query * QUERY )// macro for defining ChucK DLL export query-functions// example: CK_DLL_QUERY#ifndef __CK_DLL_STATIC__#define CK_DLL_QUERY(name) CK_DLL_DECLVERSION CK_DLL_EXPORT(t_CKBOOL) ck_query( Chuck_DL_Query * QUERY )#else#define CK_DLL_QUERY(name) CK_DLL_QUERY_STATIC(name)#endif // __CK_DLL_STATIC__// macro for defining ChucK DLL export allocator// example: CK_DLL_ALLOC(foo)#define CK_DLL_ALLOC(name) CK_DLL_EXPORT(Chuck_Object *) name( Chuck_VM * VM, Chuck_VM_Shred * SHRED, CK_DL_API API )// macro for defining ChucK DLL export constructors// example: CK_DLL_CTOR(foo)#define CK_DLL_CTOR(name) CK_DLL_EXPORT(void) name( Chuck_Object * SELF, void * ARGS, Chuck_VM * VM, Chuck_VM_Shred * SHRED, CK_DL_API API )// macro for defining ChucK DLL export destructors// example: CK_DLL_DTOR(foo)#define CK_DLL_DTOR(name) CK_DLL_EXPORT(void) name( Chuck_Object * SELF, Chuck_VM * VM, Chuck_VM_Shred * SHRED, CK_DL_API API )// macro for defining ChucK DLL export member functions// example: CK_DLL_MFUN(foo)#define CK_DLL_MFUN(name) CK_DLL_EXPORT(void) name( Chuck_Object * SELF, void * ARGS, Chuck_DL_Return * RETURN, Chuck_VM * VM, Chuck_VM_Shred * SHRED, CK_DL_API API )// macro for defining ChucK DLL export static functions// example: CK_DLL_SFUN(foo) | 1.4.1.0 (ge) added TYPE to static prototype#define CK_DLL_SFUN(name) CK_DLL_EXPORT(void) name( Chuck_Type * TYPE, void * ARGS, Chuck_DL_Return * RETURN, Chuck_VM * VM, Chuck_VM_Shred * SHRED, CK_DL_API API )// macro for defining ChucK DLL export ugen tick functions// example: CK_DLL_TICK(foo)#define CK_DLL_TICK(name) CK_DLL_EXPORT(t_CKBOOL) name( Chuck_Object * SELF, SAMPLE in, SAMPLE * out, CK_DL_API API )// macro for defining ChucK DLL export ugen multi-channel tick functions// example: CK_DLL_TICKF(foo)#define CK_DLL_TICKF(name) CK_DLL_EXPORT(t_CKBOOL) name( Chuck_Object * SELF, SAMPLE * in, SAMPLE * out, t_CKUINT nframes, CK_DL_API API )// macro for defining ChucK DLL export ugen ctrl functions// example: CK_DLL_CTRL(foo)#define CK_DLL_CTRL(name) CK_DLL_EXPORT(void) name( Chuck_Object * SELF, void * ARGS, Chuck_DL_Return * RETURN, Chuck_VM * VM, Chuck_VM_Shred * SHRED, CK_DL_API API )// macro for defining ChucK DLL export ugen cget functions// example: CK_DLL_CGET(foo)#define CK_DLL_CGET(name) CK_DLL_EXPORT(void) name( Chuck_Object * SELF, void * ARGS, Chuck_DL_Return * RETURN, Chuck_VM * VM, Chuck_VM_Shred * SHRED, CK_DL_API API )// macro for defining ChucK DLL export ugen pmsg functions// example: CK_DLL_PMSG(foo)#define CK_DLL_PMSG(name) CK_DLL_EXPORT(t_CKBOOL) name( Chuck_Object * SELF, const char * MSG, void * ARGS, Chuck_VM * VM, Chuck_VM_Shred * SHRED, CK_DL_API API )// macro for defining ChucK DLL export uana tock functions// example: CK_DLL_TOCK(foo)#define CK_DLL_TOCK(name) CK_DLL_EXPORT(t_CKBOOL) name( Chuck_Object * SELF, Chuck_UAna * UANA, Chuck_UAnaBlobProxy * BLOB, CK_DL_API API )  // macros for DLL exports// example: DLL_QUERY  query( Chuck_DL_Query * QUERY )// example: DLL_FUNC   foo( void * ARGS, Chuck_DL_Return * RETURN )// example: DLL_UGEN_F foo_tick( Chuck_UGen * SELF, SAMPLE, SAMPLE * out );#define DLL_QUERY   CK_DLL_EXPORT(t_CKBOOL)#define DLL_FUNC    CK_DLL_EXPORT(void)#define UGEN_CTOR   CK_DLL_EXPORT(void *)#define UGEN_DTOR   CK_DLL_EXPORT(void)#define UGEN_TICK   CK_DLL_EXPORT(t_CKBOOL)#define UGEN_PMSG   CK_DLL_EXPORT(t_CKBOOL)#define UGEN_CTRL   CK_DLL_EXPORT(t_CKVOID)#define UGEN_CGET   CK_DLL_EXPORT(t_CKVOID)#define UANA_TOCK   CK_DLL_EXPORT(t_CKBOOL)  //-----------------------------------------------------------------------------// dynamic linking class interface prototypes//-----------------------------------------------------------------------------extern "C" {// querytypedef t_CKUINT (CK_DLL_CALL * f_ck_declversion)();typedef t_CKBOOL (CK_DLL_CALL * f_ck_query)( Chuck_DL_Query * QUERY );// objecttypedef Chuck_Object * (CK_DLL_CALL * f_alloc)( Chuck_VM * VM, Chuck_VM_Shred * SHRED, CK_DL_API API );typedef t_CKVOID (CK_DLL_CALL * f_ctor)( Chuck_Object * SELF, void * ARGS, Chuck_VM * VM, Chuck_VM_Shred * SHRED, CK_DL_API API );typedef t_CKVOID (CK_DLL_CALL * f_dtor)( Chuck_Object * SELF, Chuck_VM * VM, Chuck_VM_Shred * SHRED, CK_DL_API API );typedef t_CKVOID (CK_DLL_CALL * f_mfun)( Chuck_Object * SELF, void * ARGS, Chuck_DL_Return * RETURN, Chuck_VM * VM, Chuck_VM_Shred * SHRED, CK_DL_API API );// 1.4.1.0 (ge) added TYPE to static prototypetypedef t_CKVOID (CK_DLL_CALL * f_sfun)( Chuck_Type * TYPE, void * ARGS, Chuck_DL_Return * RETURN, Chuck_VM * VM, Chuck_VM_Shred * SHRED, CK_DL_API API );// ugen specifictypedef t_CKBOOL (CK_DLL_CALL * f_tick)( Chuck_Object * SELF, SAMPLE in, SAMPLE * out, CK_DL_API API );typedef t_CKBOOL (CK_DLL_CALL * f_tickf)( Chuck_Object * SELF, SAMPLE * in, SAMPLE * out, t_CKUINT nframes, CK_DL_API API );typedef t_CKVOID (CK_DLL_CALL * f_ctrl)( Chuck_Object * SELF, void * ARGS, Chuck_DL_Return * RETURN, Chuck_VM * VM, Chuck_VM_Shred * SHRED, CK_DL_API API );typedef t_CKVOID (CK_DLL_CALL * f_cget)( Chuck_Object * SELF, void * ARGS, Chuck_DL_Return * RETURN, Chuck_VM * VM, Chuck_VM_Shred * SHRED, CK_DL_API API );typedef t_CKBOOL (CK_DLL_CALL * f_pmsg)( Chuck_Object * SELF, const char * MSG, void * ARGS, Chuck_VM * VM, Chuck_VM_Shred * SHRED, CK_DL_API API );// uana specifictypedef t_CKBOOL (CK_DLL_CALL * f_tock)( Chuck_Object * SELF, Chuck_UAna * UANA, Chuck_UAnaBlobProxy * BLOB, CK_DL_API API );// "main thread" hooktypedef t_CKBOOL (CK_DLL_CALL * f_mainthreadhook)( void * bindle );// "main thread" quit (stop running hook)typedef t_CKBOOL (CK_DLL_CALL * f_mainthreadquit)( void * bindle );}  // default name in DLL/ckx to look for#define CK_QUERY_FUNC        "ck_query"// default name in DLL/ckx to look for#define CK_DECLVERSION_FUNC  "ck_version"// bad object data offset#define CK_INVALID_OFFSET    0xffffffff  //-----------------------------------------------------------------------------// chuck DLL query functions, implemented on chuck side for portability//-----------------------------------------------------------------------------extern "C" {// set name of ckxtypedef void ( CK_DLL_CALL * f_setname)( Chuck_DL_Query * query, const char * name ); // begin class/namespace, can be nestedtypedef void (CK_DLL_CALL * f_begin_class)( Chuck_DL_Query * query, const char * name, const char * parent );// add constructor, must be betwen begin/end_class : use f_add_arg to add arguments immediately aftertypedef void (CK_DLL_CALL * f_add_ctor)( Chuck_DL_Query * query, f_ctor ctor );// add destructor - cannot have argstypedef void (CK_DLL_CALL * f_add_dtor)( Chuck_DL_Query * query, f_dtor dtor );// add member function - args to followtypedef void (CK_DLL_CALL * f_add_mfun)( Chuck_DL_Query * query, f_mfun mfun, const char * type, const char * name );// add static function - args to followtypedef void (CK_DLL_CALL * f_add_sfun)( Chuck_DL_Query * query, f_sfun sfun, const char * type, const char * name );// add member variabletypedef t_CKUINT (CK_DLL_CALL * f_add_mvar)( Chuck_DL_Query * query,             const char * type, const char * name, t_CKBOOL is_const ); // TODO: public/protected/private// add static variabletypedef void (CK_DLL_CALL * f_add_svar)( Chuck_DL_Query * query,             const char * type, const char * name,             t_CKBOOL is_const, void * static_addr ); // TODO: public/protected/private// add arg - follows ctor mfun sfuntypedef void (CK_DLL_CALL * f_add_arg)( Chuck_DL_Query * query, const char * type, const char * name );// ** functions for adding unit generators, must extend ugentypedef void (CK_DLL_CALL * f_add_ugen_func)( Chuck_DL_Query * query, f_tick tick, f_pmsg pmsg, t_CKUINT num_in, t_CKUINT num_out );typedef void (CK_DLL_CALL * f_add_ugen_funcf)( Chuck_DL_Query * query, f_tickf tickf, f_pmsg pmsg, t_CKUINT num_in, t_CKUINT num_out );typedef void (CK_DLL_CALL * f_add_ugen_funcf_auto_num_channels)( Chuck_DL_Query * query, f_tickf tickf, f_pmsg psmg );// ** add a ugen control (not used) | 1.4.1.0 removed//typedef void (CK_DLL_CALL * f_add_ugen_ctrl)( Chuck_DL_Query * query, f_ctrl ctrl, f_cget cget,//                                              const char * type, const char * name );// end class/namespace - must correspondent with begin_class.  returns false on errortypedef t_CKBOOL (CK_DLL_CALL * f_end_class)( Chuck_DL_Query * query );// create main thread hook- used for executing a "hook" function in the main thread of a primary chuck instancetypedef Chuck_DL_MainThreadHook * (CK_DLL_CALL * f_create_main_thread_hook)( Chuck_DL_Query * query, f_mainthreadhook hook, f_mainthreadquit quit, void * bindle ); // documentation// set current class documentationtypedef t_CKBOOL (CK_DLL_CALL * f_doc_class)( Chuck_DL_Query * query, const char * doc );// add example of current classtypedef t_CKBOOL (CK_DLL_CALL * f_add_example)( Chuck_DL_Query * query, const char * ex );// set current function documentationtypedef t_CKBOOL (CK_DLL_CALL * f_doc_func)( Chuck_DL_Query * query, const char * doc );// set last mvar documentationtypedef t_CKBOOL (CK_DLL_CALL * f_doc_var)( Chuck_DL_Query * query, const char * doc );}  //-----------------------------------------------------------------------------// name: struct Chuck_DL_Query// desc: passed to module//-----------------------------------------------------------------------------struct Chuck_DL_Query{protected:    // REFACTOR-2017: carrier ref    Chuck_Carrier * m_carrier; public:    // REFACTOR-2017: get associated compiler, vm, env    Chuck_Compiler * compiler() const { return m_carrier->compiler; }    Chuck_VM * vm() const { return m_carrier->vm; }    Chuck_Env * env() const { return m_carrier->env; }    Chuck_Carrier * carrier() const { return m_carrier; } public:    // function pointers - to be called from client module    //   QUERY->setname( QUERY, ... );    //    // set the name of the module    f_setname setname;    // begin class/namespace, can be nexted    f_begin_class begin_class;    // add constructor, can be followed by add_arg    f_add_ctor add_ctor;    // add destructor, no args allowed    f_add_dtor add_dtor;    // add member function, can be followed by add_arg    f_add_mfun add_mfun;    // add static function, can be followed by add_arg    f_add_sfun add_sfun;    // add member variable    f_add_mvar add_mvar;    // add static variable    f_add_svar add_svar;    // add argument to function    f_add_arg add_arg;    // (ugen only) add tick and pmsg functions    f_add_ugen_func add_ugen_func;    // (ugen only) add tick and pmsg functions    f_add_ugen_funcf add_ugen_funcf;    // (ugen only) add tick and pmsg functions, specify channels by vm    f_add_ugen_funcf_auto_num_channels add_ugen_funcf_auto_num_channels;    // (ugen only) add ctrl parameters    // f_add_ugen_ctrl add_ugen_ctrl;  // not used but needed for import for now    // end class/namespace, compile it    f_end_class end_class;     // added 1.3.5    Chuck_DL_Value * last_var;    f_doc_class doc_class;    f_doc_func doc_func;    f_doc_var doc_var;    f_add_example add_ex;     // re-added 1.4.0.1    f_create_main_thread_hook create_main_thread_hook;     // NOTE: everything below std::anything cannot be reliably accessed    // by offset between dynamic modules, since std::anything could be variable    // size -- put everything need to be accessed across modules above here!    // discovered by the vigilant and forever traumatized Jack Atherton,    // fixed during REFACTOR-2017; warning by the guilt-ridden Ge Wang     // dll    Chuck_DLL * dll_ref;    // reserved    void * reserved;    // sample rate    t_CKUINT srate;    // line pos    int linepos;    // name of dll    std::string dll_name;     // current class    Chuck_DL_Class * curr_class;    // current function    Chuck_DL_Func * curr_func;    // name    std::string name;    // collection of class    std::vector<Chuck_DL_Class *> classes;    // stack    std::vector<Chuck_DL_Class * >stack;     // constructor    Chuck_DL_Query( Chuck_Carrier * carrier );    // desctructor    ~Chuck_DL_Query() { this->clear(); }    // clear    void clear();};    //-----------------------------------------------------------------------------// name: struct Chuck_DL_Class// desc: class built from module//-----------------------------------------------------------------------------struct Chuck_DL_Class{    // the name of the class    std::string name;    // the name of the parent    std::string parent;    // ctor    std::vector<Chuck_DL_Func *> ctors;    // dtor    Chuck_DL_Func * dtor;    // mfun    std::vector<Chuck_DL_Func *> mfuns;    // sfun    std::vector<Chuck_DL_Func *> sfuns;    // mdata    std::vector<Chuck_DL_Value *> mvars;    // sdata    std::vector<Chuck_DL_Value *> svars;    // ugen_tick    f_tick ugen_tick;    // ugen_tickf    f_tickf ugen_tickf;    // ugen_pmsg    f_pmsg ugen_pmsg;    // ugen_ctrl/cget    std::vector<Chuck_DL_Ctrl *> ugen_ctrl;    // uana_tock    f_tock uana_tock;    // collection of recursive classes    std::vector<Chuck_DL_Class *> classes;    // current mvar offset    t_CKUINT current_mvar_offset;     t_CKUINT ugen_num_in, ugen_num_out;     std::string doc;    std::vector<std::string> examples;     // constructor    Chuck_DL_Class() { dtor = NULL; ugen_tick = NULL; ugen_tickf = NULL; ugen_pmsg = NULL; uana_tock = NULL; ugen_pmsg = NULL; current_mvar_offset = 0; ugen_num_in = ugen_num_out = 0; }    // destructor    ~Chuck_DL_Class();};    //-----------------------------------------------------------------------------// name: struct Chuck_DL_Value// desc: value from module//-----------------------------------------------------------------------------struct Chuck_DL_Value{    // the name of the value    std::string name;    // the type of the value    std::string type;    // is const    t_CKBOOL is_const;    // addr static    void * static_addr;    // description    std::string doc;     // constructor    Chuck_DL_Value() { is_const = FALSE; static_addr = NULL; }    Chuck_DL_Value( const char * t, const char * n, t_CKBOOL c = FALSE, void * a = NULL )    { name = n; type = t; is_const = c; static_addr = a; }};   

Lines 1–500 of 778.

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t