/[svn]/linuxsampler/trunk/src/engines/common/InstrumentScriptVM.h
ViewVC logotype

Diff of /linuxsampler/trunk/src/engines/common/InstrumentScriptVM.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2871 by schoenebeck, Sun Apr 10 18:22:23 2016 UTC revision 2942 by schoenebeck, Wed Jul 13 15:51:06 2016 UTC
# Line 16  Line 16 
16  #include "Event.h"  #include "Event.h"
17  #include "../../common/Pool.h"  #include "../../common/Pool.h"
18  #include "InstrumentScriptVMFunctions.h"  #include "InstrumentScriptVMFunctions.h"
19    #include "InstrumentScriptVMDynVars.h"
20    
21    /**
22     * Amount of bits on the left hand side of all pool_element_id_t numbers (i.e.
23     * event_id_t, note_id_t) being reserved for script VM implementation internal
24     * purposes.
25     *
26     * Right now there is only one bit reserved, which allows the VM (and its
27     * built-in functions) to distinguish user supplied @c Event IDs (event_id_t)
28     * from @c Note IDs (note_id_t).
29     */
30    #define INSTR_SCRIPT_EVENT_ID_RESERVED_BITS 1
31    
32    /**
33     * Used to mark IDs (in script scope) to actually be a note ID.
34     */
35    #define INSTR_SCRIPT_NOTE_ID_FLAG   (1 << (sizeof(pool_element_id_t) * 8 - 1))
36    
37  #define INSTR_SCRIPT_EVENT_GROUPS 28  #define INSTR_SCRIPT_EVENT_GROUPS 28
38    
39    #define EVENT_STATUS_INACTIVE 0
40    #define EVENT_STATUS_NOTE_QUEUE 1
41    
42  namespace LinuxSampler {  namespace LinuxSampler {
43    
44      class AbstractEngineChannel;      class AbstractEngineChannel;
45      class InstrumentScript;      class InstrumentScript;
46    
47        /** @brief Convert IDs between script scope and engine internal scope.
48         *
49         * This class is used to translate unique IDs of events between script
50         * scope and sampler engine internal scope, that is:
51         * @code
52         * int (script scope) -> event_id_t (engine internal scope)
53         * int (script scope) -> note_id_t (engine internal scope)
54         * @endcode
55         * and vice versa:
56         * @code
57         * event_id_t (engine internal scope) -> int (script scope)
58         * note_id_t (engine internal scope)  -> int (script scope)
59         * @endcode
60         * This is required because engine internally notes and regular events are
61         * using their own, separate ID generating pool, and their ID number set
62         * may thus overlap.
63         *
64         * @see INSTR_SCRIPT_EVENT_ID_RESERVED_BITS
65         */
66        class ScriptID {
67        public:
68            enum type_t {
69                EVENT, ///< ID is actually an event ID
70                NOTE, ///< ID is actually a note ID
71            };
72    
73            /**
74             * Construct a ScriptID object with an ID from script scope.
75             */
76            ScriptID(uint id) : m_id(id) {}
77    
78            /**
79             * Returns a ScriptID object constructed with an event ID from engine
80             * internal scope.
81             */
82            inline static ScriptID fromEventID(event_id_t id) {
83                return ScriptID(id);
84            }
85    
86            /**
87             * Returns a ScriptID object constructed with a note ID from engine
88             * internal scope.
89             */
90            inline static ScriptID fromNoteID(note_id_t id) {
91                return ScriptID(INSTR_SCRIPT_NOTE_ID_FLAG | id);
92            }
93    
94            /**
95             * Whether the ID reflected by this ScriptID object is actually a note
96             * ID or rather an event ID.
97             */
98            inline type_t type() const {
99                return (m_id & INSTR_SCRIPT_NOTE_ID_FLAG) ? NOTE : EVENT;
100            }
101    
102            inline bool isNoteID() const {
103                return type() == NOTE;
104            }
105    
106            inline bool isEventID() const {
107                return type() == EVENT;
108            }
109    
110            /**
111             * Returns event ID (for engine internal scope) of the ID reflected by
112             * this ScriptID object, it returns 0 (being an invalid ID) if the ID
113             * reflected by this ScriptID object is not an event ID.
114             */
115            inline event_id_t eventID() const {
116                switch (type()) {
117                    case EVENT: return m_id;
118                    default:    return 0; // not an event id, return invalid ID
119                }
120            }
121    
122            /**
123             * Returns note ID (for engine internal scope) of the ID reflected by
124             * this ScriptID object, it returns 0 (being an invalid ID) if the ID
125             * reflected by this ScriptID object is not a note ID.
126             */
127            inline note_id_t noteID() const {
128                switch (type()) {
129                    case NOTE: return ~INSTR_SCRIPT_NOTE_ID_FLAG & m_id;
130                    default:   return 0; // not a note id, return invalid ID
131                }
132            }
133    
134            /**
135             * Integer cast operator, which returns an ID number of this ScripID
136             * object intended for script scope.
137             */
138            inline operator uint() const {
139                return m_id;
140            }
141    
142        private:
143            uint m_id;
144        };
145    
146      /** @brief List of Event IDs.      /** @brief List of Event IDs.
147       *       *
148       * Used for built-in script functions:       * Used for built-in script functions:
# Line 96  namespace LinuxSampler { Line 215  namespace LinuxSampler {
215          std::map<String,VMIntRelPtr*> builtInIntVariables() OVERRIDE;          std::map<String,VMIntRelPtr*> builtInIntVariables() OVERRIDE;
216          std::map<String,VMInt8Array*> builtInIntArrayVariables() OVERRIDE;          std::map<String,VMInt8Array*> builtInIntArrayVariables() OVERRIDE;
217          std::map<String,int> builtInConstIntVariables() OVERRIDE;          std::map<String,int> builtInConstIntVariables() OVERRIDE;
218            std::map<String,VMDynVar*> builtInDynamicVariables() OVERRIDE;
219      protected:      protected:
220          ScriptEvent* m_event; ///< The event currently executed by exec().          ScriptEvent* m_event; ///< The event currently executed by exec().
221    
# Line 118  namespace LinuxSampler { Line 238  namespace LinuxSampler {
238          InstrumentScriptVMFunction_set_event_mark m_fnSetEventMark;          InstrumentScriptVMFunction_set_event_mark m_fnSetEventMark;
239          InstrumentScriptVMFunction_delete_event_mark m_fnDeleteEventMark;          InstrumentScriptVMFunction_delete_event_mark m_fnDeleteEventMark;
240          InstrumentScriptVMFunction_by_marks m_fnByMarks;          InstrumentScriptVMFunction_by_marks m_fnByMarks;
241            InstrumentScriptVMFunction_change_vol m_fnChangeVol;
242            InstrumentScriptVMFunction_change_tune m_fnChangeTune;
243            InstrumentScriptVMFunction_change_pan m_fnChangePan;
244            InstrumentScriptVMFunction_change_cutoff m_fnChangeCutoff;
245            InstrumentScriptVMFunction_change_reso m_fnChangeReso;
246            InstrumentScriptVMFunction_event_status m_fnEventStatus;
247            InstrumentScriptVMDynVar_ENGINE_UPTIME m_varEngineUptime;
248    
249          friend class InstrumentScriptVMFunction_play_note;          friend class InstrumentScriptVMFunction_play_note;
250          friend class InstrumentScriptVMFunction_set_controller;          friend class InstrumentScriptVMFunction_set_controller;
# Line 127  namespace LinuxSampler { Line 254  namespace LinuxSampler {
254          friend class InstrumentScriptVMFunction_set_event_mark;          friend class InstrumentScriptVMFunction_set_event_mark;
255          friend class InstrumentScriptVMFunction_delete_event_mark;          friend class InstrumentScriptVMFunction_delete_event_mark;
256          friend class InstrumentScriptVMFunction_by_marks;          friend class InstrumentScriptVMFunction_by_marks;
257            friend class InstrumentScriptVMFunction_change_vol;
258            friend class InstrumentScriptVMFunction_change_tune;
259            friend class InstrumentScriptVMFunction_change_pan;
260            friend class InstrumentScriptVMFunction_change_cutoff;
261            friend class InstrumentScriptVMFunction_change_reso;
262            friend class InstrumentScriptVMFunction_event_status;
263            friend class InstrumentScriptVMDynVar_ENGINE_UPTIME;
264      };      };
265    
266  } // namespace LinuxSampler  } // namespace LinuxSampler

Legend:
Removed from v.2871  
changed lines
  Added in v.2942

  ViewVC Help
Powered by ViewVC