Skip to content

Instantly share code, notes, and snippets.

@john-peterson
Last active December 16, 2015 18:59
Show Gist options
  • Save john-peterson/5481542 to your computer and use it in GitHub Desktop.
Save john-peterson/5481542 to your computer and use it in GitHub Desktop.
git diff --stat -p _diff..state
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