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
;
29 namespace command
{ class group
; }
30 namespace lua
{ class state
; }
31 namespace settingvar
{ class group
; }
32 namespace settingvar
{ class cache
; }
33 namespace keyboard
{ class keyboard
; }
34 namespace keyboard
{ class mapper
; }
35 namespace triplebuffer
{ template<typename T
> class triplebuffer
; }
42 void (*free1
)(void* ptr
);
43 void (*free2
)(void* ptr
);
50 template<typename T
> void prealloc(T
*& ptr
)
53 e
.ptr
= ptr
= reinterpret_cast<T
*>(new char[sizeof(T
) + 32]);
54 memset(ptr
, 0, sizeof(T
) + 32);
60 template<typename T
, typename
... U
> void init(T
*& ptr
, U
&... args
)
68 e
->free1
= free1_p
<T
>;
71 e
.ptr
= ptr
= new T(args
...);
80 static void null(void* ptr
) {}
81 static void free2(void* ptr
) { delete[] reinterpret_cast<char*>(ptr
); }
82 template<typename T
> static void free1(void* ptr
) { delete reinterpret_cast<T
*>(ptr
); }
83 template<typename T
> static void free1_p(void* ptr
) { reinterpret_cast<T
*>(ptr
)->~T(); }
86 struct emulator_instance
90 emulator_dispatch
* dispatch
;
96 settingvar::group
* settings
;
97 settingvar::cache
* setcache
;
98 voice_commentary
* commentary
;
99 subtitle_commentary
* subtitles
;
100 movie_branches
* mbranch
;
101 controller_state
* controls
;
102 button_mapping
* buttons
;
103 multitrack_edit
* mteditor
;
104 _lsnes_status
* status_A
;
105 _lsnes_status
* status_B
;
106 _lsnes_status
* status_C
;
107 triplebuffer::triplebuffer
<_lsnes_status
>* status
;
108 keyboard::keyboard
* keyboard
;
109 command::group
* command
;
110 keyboard::mapper
* mapper
;
111 alias_binds_manager
* abindmanager
;
113 cart_mappings_refresher
* cmapper
;
114 project_state
* project
;
116 framerate_regulator
* framerate
;
117 emu_framebuffer
* fbuf
;
119 master_dumper
* mdumper
;
120 slotinfo_cache
* slotcache
;
121 audioapi_instance
* audio
;
122 threads::id emu_thread
;
123 time_t random_seed_value
;
126 emulator_instance(const emulator_instance
&);
127 emulator_instance
& operator=(const emulator_instance
&);
130 extern emulator_instance lsnes_instance
;
132 emulator_instance
& CORE();