Author: dfranke
Date: Wed Apr 8 09:00:29 2009
New Revision: 34629
URL: http://svn.gna.org/viewcvs/wesnoth?rev=34629&view=rev
Log:
Move save_blocker out of savegame.cpp/hpp and into its own module, per request
by jhinrichs
Added:
trunk/src/save_blocker.cpp (with props)
trunk/src/save_blocker.hpp (with props)
Modified:
trunk/src/CMakeLists.txt
trunk/src/Makefile.am
trunk/src/SConscript
trunk/src/play_controller.cpp
trunk/src/playsingle_controller.cpp
trunk/src/savegame.cpp
trunk/src/savegame.hpp
Modified: trunk/src/CMakeLists.txt
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/CMakeLists.txt?rev=34629&r1=34628&r2=34629&view=diff
==============================================================================
--- trunk/src/CMakeLists.txt (original)
+++ trunk/src/CMakeLists.txt Wed Apr 8 09:00:29 2009
@@ -301,6 +301,7 @@
portrait.cpp
replay.cpp
replay_controller.cpp
+ save_blocker.cpp
savegame.cpp
scripting/lua.cpp
sha1.cpp
Modified: trunk/src/Makefile.am
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/Makefile.am?rev=34629&r1=34628&r2=34629&view=diff
==============================================================================
--- trunk/src/Makefile.am (original)
+++ trunk/src/Makefile.am Wed Apr 8 09:00:29 2009
@@ -138,6 +138,7 @@
portrait.cpp \
replay.cpp \
replay_controller.cpp \
+ save_blocker.cpp \
savegame.cpp \
scripting/lua.cpp \
sha1.cpp \
Modified: trunk/src/SConscript
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/SConscript?rev=34629&r1=34628&r2=34629&view=diff
==============================================================================
--- trunk/src/SConscript (original)
+++ trunk/src/SConscript Wed Apr 8 09:00:29 2009
@@ -193,6 +193,7 @@
portrait.cpp
replay.cpp
replay_controller.cpp
+ save_blocker.cpp
savegame.cpp
scripting/lua.cpp
sha1.cpp
Modified: trunk/src/play_controller.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/play_controller.cpp?rev=34629&r1=34628&r2=34629&view=diff
==============================================================================
--- trunk/src/play_controller.cpp (original)
+++ trunk/src/play_controller.cpp Wed Apr 8 09:00:29 2009
@@ -28,7 +28,7 @@
#include "sound.hpp"
#include "unit_id.hpp"
#include "terrain_filter.hpp"
-#include "savegame.hpp"
+#include "save_blocker.hpp"
#define LOG_NG LOG_STREAM(info, engine)
Modified: trunk/src/playsingle_controller.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/playsingle_controller.cpp?rev=34629&r1=34628&r2=34629&view=diff
==============================================================================
--- trunk/src/playsingle_controller.cpp (original)
+++ trunk/src/playsingle_controller.cpp Wed Apr 8 09:00:29 2009
@@ -34,7 +34,7 @@
#include "upload_log.hpp"
#include "formula_string_utils.hpp"
#include "events.hpp"
-#include "savegame.hpp"
+#include "save_blocker.hpp"
#define ERR_NG LOG_STREAM(err, engine)
#define LOG_NG LOG_STREAM(info, engine)
Added: trunk/src/save_blocker.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/save_blocker.cpp?rev=34629&view=auto
==============================================================================
--- trunk/src/save_blocker.cpp (added)
+++ trunk/src/save_blocker.cpp Wed Apr 8 09:00:29 2009
@@ -1,0 +1,59 @@
+/* $Id$ */
+/*
+ Copyright (C) 2009 by Daniel Franke.
+ Part of the Battle for Wesnoth Project http://www.wesnoth.org/
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License version 2
+ or at your option any later version.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY.
+
+ See the COPYING file for more details.
+*/
+
+#include "save_blocker.hpp"
+
+play_controller* save_blocker::controller_ = NULL;
+void (play_controller::*save_blocker::callback_)() = NULL;
+SDL_sem* save_blocker::sem_ = SDL_CreateSemaphore(1);
+
+save_blocker::save_blocker() {
+ block();
+}
+
+save_blocker::~save_blocker() {
+ unblock();
+ if(controller_ && callback_) {
+ (controller_->*callback_)();
+ controller_ = NULL;
+ callback_ = NULL;
+ }
+}
+
+void save_blocker::on_unblock(play_controller* controller, void
(play_controller::*callback)()) {
+ if(try_block()) {
+ unblock();
+ (controller->*callback)();
+ } else {
+ controller_ = controller;
+ callback_ = callback;
+ }
+}
+
+bool save_blocker::saves_are_blocked() {
+ return SDL_SemValue(sem_) == 0;
+}
+
+void save_blocker::block() {
+ SDL_SemWait(sem_);
+}
+
+bool save_blocker::try_block() {
+ return SDL_SemTryWait(sem_) == 0;
+}
+
+void save_blocker::unblock() {
+ assert(SDL_SemValue(sem_) == 0);
+ SDL_SemPost(sem_);
+}
Propchange: trunk/src/save_blocker.cpp
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: trunk/src/save_blocker.cpp
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: trunk/src/save_blocker.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/save_blocker.hpp?rev=34629&view=auto
==============================================================================
--- trunk/src/save_blocker.hpp (added)
+++ trunk/src/save_blocker.hpp Wed Apr 8 09:00:29 2009
@@ -1,0 +1,55 @@
+/* $Id$ */
+/*
+ Copyright (C) 2009 by Daniel Franke.
+ Part of the Battle for Wesnoth Project http://www.wesnoth.org/
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License version 2
+ or at your option any later version.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY.
+
+ See the COPYING file for more details.
+*/
+
+#ifndef SAVE_BLOCKER_H_INCLUDED
+#define SAVE_BLOCKER_H_INCLUDED
+
+#include "play_controller.hpp"
+#include "SDL_mutex.h"
+
+/** While any instance of this class exists, attempts to save the game via
+ * any call to play_controller will be temporarily postponed: the call will
+ * return immediately without performing the save, but the save method will
+ * then be reinvoked from this class's destructor. If multiple save attempts
+ * are performed, only the last will be carried out.
+ */
+class save_blocker {
+public:
+ save_blocker();
+ ~save_blocker();
+ static bool saves_are_blocked();
+ static void on_unblock(play_controller* controller, void
(play_controller::*callback)());
+
+protected:
+ friend class play_controller;
+ static void block();
+ static bool try_block();
+ static void unblock();
+
+ /** An exception-safe means of making sure that unblock() gets called
+ * after try_block().
+ */
+ class save_unblocker {
+ public:
+ save_unblocker() {}
+ ~save_unblocker() { save_blocker::unblock(); }
+ };
+
+private:
+ static play_controller *controller_;
+ static void (play_controller::*callback_)();
+ static SDL_sem* sem_;
+};
+
+#endif
Propchange: trunk/src/save_blocker.hpp
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: trunk/src/save_blocker.hpp
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: trunk/src/savegame.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/savegame.cpp?rev=34629&r1=34628&r2=34629&view=diff
==============================================================================
--- trunk/src/savegame.cpp (original)
+++ trunk/src/savegame.cpp Wed Apr 8 09:00:29 2009
@@ -39,50 +39,6 @@
, interactive_(false)
{}
-play_controller* save_blocker::controller_ = NULL;
-void (play_controller::*save_blocker::callback_)() = NULL;
-SDL_sem* save_blocker::sem_ = SDL_CreateSemaphore(1);
-
-save_blocker::save_blocker() {
- block();
-}
-
-save_blocker::~save_blocker() {
- unblock();
- if(controller_ && callback_) {
- (controller_->*callback_)();
- controller_ = NULL;
- callback_ = NULL;
- }
-}
-
-void save_blocker::on_unblock(play_controller* controller, void
(play_controller::*callback)()) {
- if(try_block()) {
- unblock();
- (controller->*callback)();
- } else {
- controller_ = controller;
- callback_ = callback;
- }
-}
-
-bool save_blocker::saves_are_blocked() {
- return SDL_SemValue(sem_) == 0;
-}
-
-void save_blocker::block() {
- SDL_SemWait(sem_);
-}
-
-bool save_blocker::try_block() {
- return SDL_SemTryWait(sem_) == 0;
-}
-
-void save_blocker::unblock() {
- assert(SDL_SemValue(sem_) == 0);
- SDL_SemPost(sem_);
-}
-
void savegame::save_game_interactive(display& gui, const std::string& message,
gui::DIALOG_TYPE dialog_type, const bool has_exit_button,
const
bool ask_for_filename)
Modified: trunk/src/savegame.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/savegame.hpp?rev=34629&r1=34628&r2=34629&view=diff
==============================================================================
--- trunk/src/savegame.hpp (original)
+++ trunk/src/savegame.hpp Wed Apr 8 09:00:29 2009
@@ -19,36 +19,9 @@
#include "global.hpp"
#include "show_dialog.hpp"
#include "gamestatus.hpp"
-#include "play_controller.hpp"
#include <string>
-#include "SDL_mutex.h"
-
-class save_blocker {
-public:
- save_blocker();
- ~save_blocker();
- static bool saves_are_blocked();
- static void on_unblock(play_controller* controller, void
(play_controller::*callback)());
-
-protected:
- friend class play_controller;
- static void block();
- static bool try_block();
- static void unblock();
-
- class save_unblocker {
- public:
- save_unblocker() {}
- ~save_unblocker() { save_blocker::unblock(); }
- };
-
-private:
- static play_controller *controller_;
- static void (play_controller::*callback_)();
- static SDL_sem* sem_;
-};
/** The base class for all savegame stuff */
class savegame
_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits