1 | #ifndef STATEMANAGER_H |
2 | #define STATEMANAGER_H |
3 | |
4 | /* State Manager Class that records snapshot data for rewinding |
5 | mostly based on SSNES's rewind code by Themaister |
6 | */ |
7 | |
8 | #include "snes9x.h" |
9 | |
10 | class StateManager { |
11 | private: |
12 | uint64_t *buffer; |
13 | size_t buf_size; |
14 | size_t buf_size_mask; |
15 | uint32_t *tmp_state; |
16 | uint32_t *in_state; |
17 | size_t top_ptr; |
18 | size_t bottom_ptr; |
19 | size_t state_size; |
20 | size_t real_state_size; |
21 | bool init_done; |
22 | bool first_pop; |
23 | |
24 | void reassign_bottom(); |
25 | void generate_delta(const void *data); |
26 | void deallocate(); |
27 | public: |
28 | StateManager(); |
29 | ~StateManager(); |
30 | bool init(size_t buffer_size); |
31 | int pop(); |
32 | bool push(); |
33 | }; |
34 | |
35 | #endif // STATEMANAGER_H |
36 | |