1 #ifndef _instance__hpp__included__
2 #define _instance__hpp__included__
4 #include "library/threads.hpp"
9 class voice_commentary
;
10 class subtitle_commentary
;
12 class multitrack_edit
;
14 class alias_binds_manager
;
16 class cart_mappings_refresher
;
17 class controller_state
;
20 class framerate_regulator
;
21 class emu_framebuffer
;
25 class emulator_dispatch
;
28 class audioapi_instance
;
31 class emulator_runmode
;
33 namespace command
{ class group
; }
34 namespace lua
{ class state
; }
35 namespace settingvar
{ class group
; }
36 namespace settingvar
{ class cache
; }
37 namespace keyboard
{ class keyboard
; }
38 namespace keyboard
{ class mapper
; }
39 namespace triplebuffer
{ template<typename T
> class triplebuffer
; }
46 void (*free1
)(void* ptr
);
47 void (*free2
)(void* ptr
);
54 template<typename T
> void prealloc(T
*& ptr
)
57 e
.ptr
= ptr
= reinterpret_cast<T
*>(new char[sizeof(T
) + 32]);
58 memset(ptr
, 0, sizeof(T
) + 32);
64 template<typename T
, typename
... U
> void init(T
*& ptr
, U
&... args
)
72 e
->free1
= free1_p
<T
>;
75 e
.ptr
= ptr
= new T(args
...);
84 static void null(void* ptr
) {}
85 static void free2(void* ptr
) { delete[] reinterpret_cast<char*>(ptr
); }
86 template<typename T
> static void free1(void* ptr
) { delete reinterpret_cast<T
*>(ptr
); }
87 template<typename T
> static void free1_p(void* ptr
) { reinterpret_cast<T
*>(ptr
)->~T(); }
90 struct emulator_instance
94 emulator_dispatch
* dispatch
;
100 settingvar::group
* settings
;
101 settingvar::cache
* setcache
;
102 voice_commentary
* commentary
;
103 subtitle_commentary
* subtitles
;
104 movie_branches
* mbranch
;
105 controller_state
* controls
;
106 button_mapping
* buttons
;
107 multitrack_edit
* mteditor
;
108 _lsnes_status
* status_A
;
109 _lsnes_status
* status_B
;
110 _lsnes_status
* status_C
;
111 triplebuffer::triplebuffer
<_lsnes_status
>* status
;
112 keyboard::keyboard
* keyboard
;
113 command::group
* command
;
114 keyboard::mapper
* mapper
;
115 alias_binds_manager
* abindmanager
;
117 cart_mappings_refresher
* cmapper
;
118 project_state
* project
;
120 framerate_regulator
* framerate
;
121 emu_framebuffer
* fbuf
;
123 master_dumper
* mdumper
;
124 slotinfo_cache
* slotcache
;
125 audioapi_instance
* audio
;
127 save_jukebox
* jukebox
;
128 emulator_runmode
* runmode
;
129 status_updater
* supdater
;
130 threads::id emu_thread
;
131 time_t random_seed_value
;
134 emulator_instance(const emulator_instance
&);
135 emulator_instance
& operator=(const emulator_instance
&);
138 extern emulator_instance lsnes_instance
;
140 emulator_instance
& CORE();