Last active
December 16, 2015 18:59
-
-
Save john-peterson/5481542 to your computer and use it in GitHub Desktop.
git diff --stat -p _diff..state
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Source/Core/Core/Src/ConfigManager.cpp | 4 - | |
Source/Core/Core/Src/State.cpp | 44 +++++-- | |
Source/Core/Core/Src/State.h | 4 +- | |
Source/Core/DolphinWX/Src/Frame.cpp | 204 ++++++++---------------------- | |
Source/Core/DolphinWX/Src/FrameTools.cpp | 4 +- | |
5 files changed, 85 insertions(+), 175 deletions(-) | |
diff --git a/Source/Core/Core/Src/ConfigManager.cpp b/Source/Core/Core/Src/ConfigManager.cpp | |
index 1c686ae..ded0cd1 100644 | |
--- a/Source/Core/Core/Src/ConfigManager.cpp | |
+++ b/Source/Core/Core/Src/ConfigManager.cpp | |
@@ -34,12 +34,8 @@ static const struct { | |
{ "Readonlymode", 0, 0 /* wxMOD_NONE */ }, | |
{ "ToggleFullscreen", 70 /* 'F' */, 2 /* wxMOD_CMD */ }, | |
-<<<<<<< HEAD | |
{ "Screenshot", 83 /* 'S' */, 2 /* wxMOD_CMD */ }, | |
-======= | |
- { "Screenshot", 83 /* 'S' */, 2 /* wxMOD_CMD */ }, | |
{ "Exit", 0, 0 /* wxMOD_NONE */ }, | |
->>>>>>> b25dbca... Adding option to load state by mtime. Load last state is expanded to 8 actions, for newest to oldest state. A new action is to overwrite the oldest state (or use an empty slot if available). | |
{ "Wiimote1Connect", 49 /* '1' */, 2 /* wxMOD_CMD */ }, | |
{ "Wiimote2Connect", 50 /* '2' */, 2 /* wxMOD_CMD */ }, | |
diff --git a/Source/Core/Core/Src/State.cpp b/Source/Core/Core/Src/State.cpp | |
index d25740c..cf694f7 100644 | |
--- a/Source/Core/Core/Src/State.cpp | |
+++ b/Source/Core/Core/Src/State.cpp | |
@@ -167,22 +167,38 @@ int GetEmptySlot() | |
return -1; | |
} | |
+// return value not in map | |
+int GetEmptySlot(std::map<double, int> m) | |
+{ | |
+ for (int i = 1; i <= 8; i++) { | |
+ bool found = false; | |
+ for (std::map<double, int>::iterator it = m.begin(); it != m.end(); it++) { | |
+ if (it->second == i) { | |
+ found = true; | |
+ break; | |
+ } | |
+ } | |
+ if (!found) return i; | |
+ } | |
+ return -1; | |
+} | |
+ | |
std::map<double, int> GetSavedStates() | |
{ | |
struct stat t; | |
- std::map<double, int> x; | |
+ std::map<double, int> m; | |
for (int i = 1; i <= 8; i++) | |
{ | |
if (File::Exists(MakeStateFilename(i))) { | |
if (!stat(MakeStateFilename(i).c_str(), &t)) { | |
double d = difftime(time(0), t.st_mtime); | |
// increase time until unique value is obtained | |
- while (x.find(d) != x.end()) d++; | |
- x.insert(std::pair<double,int>(d, i)); | |
+ while (m.find(d) != m.end()) d++; | |
+ m.insert(std::pair<double,int>(d, i)); | |
} | |
} | |
} | |
- return x; | |
+ return m; | |
} | |
struct CompressAndDumpState_args | |
@@ -190,12 +206,13 @@ struct CompressAndDumpState_args | |
std::vector<u8>* buffer_vector; | |
std::mutex* buffer_mutex; | |
std::string filename; | |
+ bool wait; | |
}; | |
void CompressAndDumpState(CompressAndDumpState_args save_args) | |
{ | |
std::lock_guard<std::mutex> lk(*save_args.buffer_mutex); | |
- g_compressAndDumpStateSyncEvent.Set(); | |
+ if (!save_args.wait) g_compressAndDumpStateSyncEvent.Set(); | |
const u8* const buffer_data = &(*(save_args.buffer_vector))[0]; | |
const size_t buffer_size = (save_args.buffer_vector)->size(); | |
@@ -227,6 +244,7 @@ void CompressAndDumpState(CompressAndDumpState_args save_args) | |
if (!f) | |
{ | |
Core::DisplayMessage("Could not save state", 2000); | |
+ g_compressAndDumpStateSyncEvent.Set(); | |
return; | |
} | |
@@ -270,9 +288,10 @@ void CompressAndDumpState(CompressAndDumpState_args save_args) | |
Core::DisplayMessage(StringFromFormat("Saved State to %s", | |
filename.c_str()).c_str(), 2000); | |
+ g_compressAndDumpStateSyncEvent.Set(); | |
} | |
-void SaveAs(const std::string& filename) | |
+void SaveAs(const std::string& filename, bool wait) | |
{ | |
// Pause the core while we save the state | |
bool wasUnpaused = Core::PauseAndLock(true); | |
@@ -300,6 +319,7 @@ void SaveAs(const std::string& filename) | |
save_args.buffer_vector = &g_current_buffer; | |
save_args.buffer_mutex = &g_cs_current_buffer; | |
save_args.filename = filename; | |
+ save_args.wait = wait; | |
Flush(); | |
g_save_thread = std::thread(CompressAndDumpState, save_args); | |
@@ -522,9 +542,9 @@ static std::string MakeStateFilename(int number) | |
SConfig::GetInstance().m_LocalCoreStartupParameter.GetUniqueID().c_str(), number); | |
} | |
-void Save(int slot) | |
+void Save(int slot, bool wait) | |
{ | |
- SaveAs(MakeStateFilename(slot)); | |
+ SaveAs(MakeStateFilename(slot), wait); | |
} | |
void Load(int slot) | |
@@ -545,7 +565,7 @@ void LoadLastSaved(int i) | |
Core::DisplayMessage("State doesn't exist", 2000); | |
else | |
{ | |
- std::map<double,int>::iterator it = savedStates.begin(); | |
+ std::map<double, int>::iterator it = savedStates.begin(); | |
std::advance(it, i-1); | |
Load(it->second); | |
} | |
@@ -556,12 +576,12 @@ void SaveFirstSaved() | |
std::map<double, int> savedStates = GetSavedStates(); | |
if (savedStates.size() < 8) | |
- Save(GetEmptySlot()); | |
+ Save(GetEmptySlot(savedStates), true); | |
else | |
{ | |
- std::map<double,int>::iterator it = savedStates.begin(); | |
+ std::map<double, int>::iterator it = savedStates.begin(); | |
std::advance(it, savedStates.size()-1); | |
- Save(it->second); | |
+ Save(it->second, true); | |
} | |
} | |
diff --git a/Source/Core/Core/Src/State.h b/Source/Core/Core/Src/State.h | |
index 5d7bbd7..959cce5 100644 | |
--- a/Source/Core/Core/Src/State.h | |
+++ b/Source/Core/Core/Src/State.h | |
@@ -25,11 +25,11 @@ void EnableCompression(bool compression); | |
// If we're in the main cpu thread then they run immediately instead | |
// because some things (like Lua) need them to run immediately. | |
// Slots from 0-99. | |
-void Save(int slot); | |
+void Save(int slot, bool wait = false); | |
void Load(int slot); | |
void Verify(int slot); | |
-void SaveAs(const std::string &filename); | |
+void SaveAs(const std::string &filename, bool wait = false); | |
void LoadAs(const std::string &filename); | |
void VerifyAt(const std::string &filename); | |
diff --git a/Source/Core/DolphinWX/Src/Frame.cpp b/Source/Core/DolphinWX/Src/Frame.cpp | |
index eacfa33..e1ce853 100644 | |
--- a/Source/Core/DolphinWX/Src/Frame.cpp | |
+++ b/Source/Core/DolphinWX/Src/Frame.cpp | |
@@ -718,163 +718,59 @@ bool IsHotkey(wxKeyEvent &event, int Id) | |
int GetCmdForHotkey(unsigned int key) | |
{ | |
-<<<<<<< HEAD | |
switch (key) | |
{ | |
- case HK_OPEN: | |
- return wxID_OPEN; | |
- | |
- case HK_CHANGE_DISC: | |
- return IDM_CHANGEDISC; | |
- | |
- case HK_REFRESH_LIST: | |
- return wxID_REFRESH; | |
- | |
- case HK_PLAY_PAUSE: | |
- return IDM_PLAY; | |
- | |
- case HK_STOP: | |
- return IDM_STOP; | |
- | |
- case HK_RESET: | |
- return IDM_RESET; | |
- | |
- case HK_FRAME_ADVANCE: | |
- return IDM_FRAMESTEP; | |
- | |
- case HK_START_RECORDING: | |
- return IDM_RECORD; | |
- | |
- case HK_PLAY_RECORDING: | |
- return IDM_PLAYRECORD; | |
- | |
- case HK_EXPORT_RECORDING: | |
- return IDM_RECORDEXPORT; | |
- | |
- case HK_READ_ONLY_MODE: | |
- return IDM_RECORDREADONLY; | |
- | |
- case HK_FULLSCREEN: | |
- return IDM_TOGGLE_FULLSCREEN; | |
- | |
- case HK_SCREENSHOT: | |
- return IDM_SCREENSHOT; | |
- | |
- case HK_WIIMOTE1_CONNECT: | |
- return IDM_CONNECT_WIIMOTE1; | |
- | |
- case HK_WIIMOTE2_CONNECT: | |
- return IDM_CONNECT_WIIMOTE2; | |
- | |
- case HK_WIIMOTE3_CONNECT: | |
- return IDM_CONNECT_WIIMOTE3; | |
- | |
- case HK_WIIMOTE4_CONNECT: | |
- return IDM_CONNECT_WIIMOTE4; | |
- | |
- case HK_LOAD_STATE_SLOT_1: | |
- return IDM_LOADSLOT1; | |
- | |
- case HK_LOAD_STATE_SLOT_2: | |
- return IDM_LOADSLOT2; | |
- | |
- case HK_LOAD_STATE_SLOT_3: | |
- return IDM_LOADSLOT3; | |
- | |
- case HK_LOAD_STATE_SLOT_4: | |
- return IDM_LOADSLOT4; | |
- | |
- case HK_LOAD_STATE_SLOT_5: | |
- return IDM_LOADSLOT5; | |
- | |
- case HK_LOAD_STATE_SLOT_6: | |
- return IDM_LOADSLOT6; | |
- | |
- case HK_LOAD_STATE_SLOT_7: | |
- return IDM_LOADSLOT7; | |
- | |
- case HK_LOAD_STATE_SLOT_8: | |
- return IDM_LOADSLOT8; | |
- | |
- case HK_SAVE_STATE_SLOT_1: | |
- return IDM_SAVESLOT1; | |
- | |
- case HK_SAVE_STATE_SLOT_2: | |
- return IDM_SAVESLOT2; | |
- | |
- case HK_SAVE_STATE_SLOT_3: | |
- return IDM_SAVESLOT3; | |
- | |
- case HK_SAVE_STATE_SLOT_4: | |
- return IDM_SAVESLOT4; | |
- | |
- case HK_SAVE_STATE_SLOT_5: | |
- return IDM_SAVESLOT5; | |
- | |
- case HK_SAVE_STATE_SLOT_6: | |
- return IDM_SAVESLOT6; | |
- | |
- case HK_SAVE_STATE_SLOT_7: | |
- return IDM_SAVESLOT7; | |
- | |
- case HK_SAVE_STATE_SLOT_8: | |
- return IDM_SAVESLOT8; | |
+ case HK_OPEN: return wxID_OPEN; | |
+ case HK_CHANGE_DISC: return IDM_CHANGEDISC; | |
+ case HK_REFRESH_LIST: return wxID_REFRESH; | |
+ case HK_PLAY_PAUSE: return IDM_PLAY; | |
+ case HK_STOP: return IDM_STOP; | |
+ case HK_RESET: return IDM_RESET; | |
+ case HK_FRAME_ADVANCE: return IDM_FRAMESTEP; | |
+ case HK_START_RECORDING: return IDM_RECORD; | |
+ case HK_PLAY_RECORDING: return IDM_PLAYRECORD; | |
+ case HK_EXPORT_RECORDING: return IDM_RECORDEXPORT; | |
+ case HK_READ_ONLY_MODE: return IDM_RECORDREADONLY; | |
+ case HK_FULLSCREEN: return IDM_TOGGLE_FULLSCREEN; | |
+ case HK_SCREENSHOT: return IDM_SCREENSHOT; | |
+ case HK_EXIT: return wxID_EXIT; | |
+ | |
+ case HK_WIIMOTE1_CONNECT: return IDM_CONNECT_WIIMOTE1; | |
+ case HK_WIIMOTE2_CONNECT: return IDM_CONNECT_WIIMOTE2; | |
+ case HK_WIIMOTE3_CONNECT: return IDM_CONNECT_WIIMOTE3; | |
+ case HK_WIIMOTE4_CONNECT: return IDM_CONNECT_WIIMOTE4; | |
+ | |
+ case HK_LOAD_STATE_SLOT_1: return IDM_LOADSLOT1; | |
+ case HK_LOAD_STATE_SLOT_2: return IDM_LOADSLOT2; | |
+ case HK_LOAD_STATE_SLOT_3: return IDM_LOADSLOT3; | |
+ case HK_LOAD_STATE_SLOT_4: return IDM_LOADSLOT4; | |
+ case HK_LOAD_STATE_SLOT_5: return IDM_LOADSLOT5; | |
+ case HK_LOAD_STATE_SLOT_6: return IDM_LOADSLOT6; | |
+ case HK_LOAD_STATE_SLOT_7: return IDM_LOADSLOT7; | |
+ case HK_LOAD_STATE_SLOT_8: return IDM_LOADSLOT8; | |
+ | |
+ case HK_SAVE_STATE_SLOT_1: return IDM_SAVESLOT1; | |
+ case HK_SAVE_STATE_SLOT_2: return IDM_SAVESLOT2; | |
+ case HK_SAVE_STATE_SLOT_3: return IDM_SAVESLOT3; | |
+ case HK_SAVE_STATE_SLOT_4: return IDM_SAVESLOT4; | |
+ case HK_SAVE_STATE_SLOT_5: return IDM_SAVESLOT5; | |
+ case HK_SAVE_STATE_SLOT_6: return IDM_SAVESLOT6; | |
+ case HK_SAVE_STATE_SLOT_7: return IDM_SAVESLOT7; | |
+ case HK_SAVE_STATE_SLOT_8: return IDM_SAVESLOT8; | |
+ | |
+ case HK_LOAD_LAST_STATE_1: return IDM_LOADLAST1; | |
+ case HK_LOAD_LAST_STATE_2: return IDM_LOADLAST2; | |
+ case HK_LOAD_LAST_STATE_3: return IDM_LOADLAST3; | |
+ case HK_LOAD_LAST_STATE_4: return IDM_LOADLAST4; | |
+ case HK_LOAD_LAST_STATE_5: return IDM_LOADLAST5; | |
+ case HK_LOAD_LAST_STATE_6: return IDM_LOADLAST6; | |
+ case HK_LOAD_LAST_STATE_7: return IDM_LOADLAST7; | |
+ case HK_LOAD_LAST_STATE_8: return IDM_LOADLAST8; | |
+ | |
+ case HK_SAVE_FIRST_STATE: return IDM_SAVEFIRSTSTATE; | |
+ case HK_UNDO_LOAD_STATE: return IDM_UNDOLOADSTATE; | |
+ case HK_UNDO_SAVE_STATE: return IDM_UNDOSAVESTATE; | |
} | |
-======= | |
- if (key == HK_OPEN) return wxID_OPEN; | |
- if (key == HK_CHANGE_DISC) return IDM_CHANGEDISC; | |
- if (key == HK_REFRESH_LIST) return wxID_REFRESH; | |
- | |
- if (key == HK_PLAY_PAUSE) return IDM_PLAY; | |
- if (key == HK_STOP) return IDM_STOP; | |
- if (key == HK_RESET) return IDM_RESET; | |
- if (key == HK_FRAME_ADVANCE) return IDM_FRAMESTEP; | |
- | |
- if (key == HK_START_RECORDING) return IDM_RECORD; | |
- if (key == HK_PLAY_RECORDING) return IDM_PLAYRECORD; | |
- if (key == HK_EXPORT_RECORDING) return IDM_RECORDEXPORT; | |
- if (key == HK_READ_ONLY_MODE) return IDM_RECORDREADONLY; | |
- | |
- if (key == HK_FULLSCREEN) return IDM_TOGGLE_FULLSCREEN; | |
- if (key == HK_SCREENSHOT) return IDM_SCREENSHOT; | |
- if (key == HK_EXIT) return wxID_EXIT; | |
- | |
- if (key == HK_WIIMOTE1_CONNECT) return IDM_CONNECT_WIIMOTE1; | |
- if (key == HK_WIIMOTE2_CONNECT) return IDM_CONNECT_WIIMOTE2; | |
- if (key == HK_WIIMOTE3_CONNECT) return IDM_CONNECT_WIIMOTE3; | |
- if (key == HK_WIIMOTE4_CONNECT) return IDM_CONNECT_WIIMOTE4; | |
- | |
- if (key == HK_LOAD_STATE_SLOT_1) return IDM_LOADSLOT1; | |
- if (key == HK_LOAD_STATE_SLOT_2) return IDM_LOADSLOT2; | |
- if (key == HK_LOAD_STATE_SLOT_3) return IDM_LOADSLOT3; | |
- if (key == HK_LOAD_STATE_SLOT_4) return IDM_LOADSLOT4; | |
- if (key == HK_LOAD_STATE_SLOT_5) return IDM_LOADSLOT5; | |
- if (key == HK_LOAD_STATE_SLOT_6) return IDM_LOADSLOT6; | |
- if (key == HK_LOAD_STATE_SLOT_7) return IDM_LOADSLOT7; | |
- if (key == HK_LOAD_STATE_SLOT_8) return IDM_LOADSLOT8; | |
- | |
- if (key == HK_SAVE_STATE_SLOT_1) return IDM_SAVESLOT1; | |
- if (key == HK_SAVE_STATE_SLOT_2) return IDM_SAVESLOT2; | |
- if (key == HK_SAVE_STATE_SLOT_3) return IDM_SAVESLOT3; | |
- if (key == HK_SAVE_STATE_SLOT_4) return IDM_SAVESLOT4; | |
- if (key == HK_SAVE_STATE_SLOT_5) return IDM_SAVESLOT5; | |
- if (key == HK_SAVE_STATE_SLOT_6) return IDM_SAVESLOT6; | |
- if (key == HK_SAVE_STATE_SLOT_7) return IDM_SAVESLOT7; | |
- if (key == HK_SAVE_STATE_SLOT_8) return IDM_SAVESLOT8; | |
- | |
- if (key == HK_LOAD_LAST_STATE_1) return IDM_LOADLAST1; | |
- if (key == HK_LOAD_LAST_STATE_2) return IDM_LOADLAST2; | |
- if (key == HK_LOAD_LAST_STATE_3) return IDM_LOADLAST3; | |
- if (key == HK_LOAD_LAST_STATE_4) return IDM_LOADLAST4; | |
- if (key == HK_LOAD_LAST_STATE_5) return IDM_LOADLAST5; | |
- if (key == HK_LOAD_LAST_STATE_6) return IDM_LOADLAST6; | |
- if (key == HK_LOAD_LAST_STATE_7) return IDM_LOADLAST7; | |
- if (key == HK_LOAD_LAST_STATE_8) return IDM_LOADLAST8; | |
- | |
- if (key == HK_SAVE_FIRST_STATE) return IDM_SAVEFIRSTSTATE; | |
- if (key == HK_UNDO_LOAD_STATE) return IDM_UNDOLOADSTATE; | |
- if (key == HK_UNDO_SAVE_STATE) return IDM_UNDOSAVESTATE; | |
->>>>>>> b25dbca... Adding option to load state by mtime. Load last state is expanded to 8 actions, for newest to oldest state. A new action is to overwrite the oldest state (or use an empty slot if available). | |
return -1; | |
} | |
diff --git a/Source/Core/DolphinWX/Src/FrameTools.cpp b/Source/Core/DolphinWX/Src/FrameTools.cpp | |
index 8325403..8d7d89c 100644 | |
--- a/Source/Core/DolphinWX/Src/FrameTools.cpp | |
+++ b/Source/Core/DolphinWX/Src/FrameTools.cpp | |
@@ -164,12 +164,10 @@ void CFrame::CreateMenu() | |
loadMenu->Append(IDM_LOADSLOT1 + i - 1, GetMenuLabel(HK_LOAD_STATE_SLOT_1 + i - 1)); | |
saveMenu->Append(IDM_SAVESLOT1 + i - 1, GetMenuLabel(HK_SAVE_STATE_SLOT_1 + i - 1)); | |
} | |
-<<<<<<< HEAD | |
-======= | |
+ | |
loadMenu->AppendSeparator(); | |
for (int i = 1; i <= 8; i++) | |
loadMenu->Append(IDM_LOADLAST1 + i - 1, GetMenuLabel(HK_LOAD_LAST_STATE_1 + i - 1)); | |
->>>>>>> b25dbca... Adding option to load state by mtime. Load last state is expanded to 8 actions, for newest to oldest state. A new action is to overwrite the oldest state (or use an empty slot if available). | |
m_MenuBar->Append(emulationMenu, _("&Emulation")); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment