1 #ifndef _instance__hpp__included__
2 #define _instance__hpp__included__
4 #include "library/threads.hpp"
10 class voice_commentary
;
11 class subtitle_commentary
;
13 class multitrack_edit
;
15 class alias_binds_manager
;
17 class cart_mappings_refresher
;
18 class controller_state
;
21 class framerate_regulator
;
22 class emu_framebuffer
;
26 class emulator_dispatch
;
29 class audioapi_instance
;
32 class emulator_runmode
;
34 namespace command
{ class group
; }
35 namespace lua
{ class state
; }
36 namespace settingvar
{ class group
; }
37 namespace settingvar
{ class cache
; }
38 namespace keyboard
{ class keyboard
; }
39 namespace keyboard
{ class mapper
; }
40 namespace triplebuffer
{ template<typename T
> class triplebuffer
; }
47 void (*free1
)(void* ptr
);
48 void (*free2
)(void* ptr
);
55 template<typename T
> void prealloc(T
*& ptr
)
58 e
.ptr
= ptr
= reinterpret_cast<T
*>(new char[sizeof(T
) + 32]);
59 memset((char*)ptr
, 0, sizeof(T
) + 32);
65 template<typename T
, typename
... U
> void init(T
*& ptr
, U
&... args
)
73 e
->free1
= free1_p
<T
>;
76 e
.ptr
= ptr
= new T(args
...);
85 static void null(void* ptr
) {}
86 static void free2(void* ptr
) { delete[] reinterpret_cast<char*>(ptr
); }
87 template<typename T
> static void free1(void* ptr
) { delete reinterpret_cast<T
*>(ptr
); }
88 template<typename T
> static void free1_p(void* ptr
) { reinterpret_cast<T
*>(ptr
)->~T(); }
91 struct emulator_instance
95 emulator_dispatch
* dispatch
;
100 memwatch_set
* mwatch
;
101 settingvar::group
* settings
;
102 settingvar::cache
* setcache
;
103 voice_commentary
* commentary
;
104 subtitle_commentary
* subtitles
;
105 movie_branches
* mbranch
;
106 controller_state
* controls
;
107 button_mapping
* buttons
;
108 multitrack_edit
* mteditor
;
109 _lsnes_status
* status_A
;
110 _lsnes_status
* status_B
;
111 _lsnes_status
* status_C
;
112 triplebuffer::triplebuffer
<_lsnes_status
>* status
;
113 keyboard::keyboard
* keyboard
;
114 command::group
* command
;
115 keyboard::mapper
* mapper
;
116 alias_binds_manager
* abindmanager
;
118 cart_mappings_refresher
* cmapper
;
119 project_state
* project
;
121 framerate_regulator
* framerate
;
122 emu_framebuffer
* fbuf
;
124 master_dumper
* mdumper
;
125 slotinfo_cache
* slotcache
;
126 audioapi_instance
* audio
;
128 save_jukebox
* jukebox
;
129 emulator_runmode
* runmode
;
130 status_updater
* supdater
;
131 threads::id emu_thread
;
132 time_t random_seed_value
;
135 emulator_instance(const emulator_instance
&);
136 emulator_instance
& operator=(const emulator_instance
&);
139 extern emulator_instance lsnes_instance
;
141 emulator_instance
& CORE();