From cbbdf390ad9902fc4d55e74e43f829e34c8ae45b Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Thu, 21 Nov 2013 11:10:18 +0100 Subject: [PATCH] added function for inspection of saved characters and character slots --- apps/openmw/mwbase/statemanager.hpp | 8 ++++++++ apps/openmw/mwstate/character.cpp | 10 ++++++++++ apps/openmw/mwstate/character.hpp | 11 +++++++++++ apps/openmw/mwstate/charactermanager.cpp | 12 +++++++++++- apps/openmw/mwstate/charactermanager.hpp | 4 ++++ apps/openmw/mwstate/statemanagerimp.cpp | 12 +++++++++++- apps/openmw/mwstate/statemanagerimp.hpp | 4 ++++ 7 files changed, 59 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwbase/statemanager.hpp b/apps/openmw/mwbase/statemanager.hpp index 3aa464ebeb..ce8094632e 100644 --- a/apps/openmw/mwbase/statemanager.hpp +++ b/apps/openmw/mwbase/statemanager.hpp @@ -1,6 +1,8 @@ #ifndef GAME_MWSTATE_STATEMANAGER_H #define GAME_MWSTATE_STATEMANAGER_H +#include + namespace MWState { struct Slot; @@ -21,6 +23,8 @@ namespace MWBase State_Running }; + typedef std::vector::const_iterator CharacterIterator; + private: StateManager (const StateManager&); @@ -54,6 +58,10 @@ namespace MWBase /// \note Slot must belong to the current character. virtual MWState::Character *getCurrentCharacter() = 0; + + virtual CharacterIterator characterBegin() = 0; + + virtual CharacterIterator characterEnd() = 0; }; } diff --git a/apps/openmw/mwstate/character.cpp b/apps/openmw/mwstate/character.cpp index dc16085d83..660af7d891 100644 --- a/apps/openmw/mwstate/character.cpp +++ b/apps/openmw/mwstate/character.cpp @@ -98,4 +98,14 @@ const MWState::Slot *MWState::Character::updateSlot (const Slot *slot, const ESM mSlots.push_back (newSlot); return &mSlots.back(); +} + +MWState::Character::SlotIterator MWState::Character::begin() const +{ + return mSlots.rbegin(); +} + +MWState::Character::SlotIterator MWState::Character::end() const +{ + return mSlots.rend(); } \ No newline at end of file diff --git a/apps/openmw/mwstate/character.hpp b/apps/openmw/mwstate/character.hpp index 30182e4047..a6cb6fa6d1 100644 --- a/apps/openmw/mwstate/character.hpp +++ b/apps/openmw/mwstate/character.hpp @@ -18,6 +18,12 @@ namespace MWState class Character { + public: + + typedef std::vector::const_reverse_iterator SlotIterator; + + private: + boost::filesystem::path mPath; std::vector mSlots; int mNext; @@ -39,6 +45,11 @@ namespace MWState /// \note Slot must belong to this character. /// /// \attention The \æ slot pointer will be invalidated by this call. + + SlotIterator begin() const; + ///< First slot is the most recent. Other slots follow in descending order of save date. + + SlotIterator end() const; }; } diff --git a/apps/openmw/mwstate/charactermanager.cpp b/apps/openmw/mwstate/charactermanager.cpp index 6eccb63dca..6b67d0d04d 100644 --- a/apps/openmw/mwstate/charactermanager.cpp +++ b/apps/openmw/mwstate/charactermanager.cpp @@ -59,4 +59,14 @@ void MWState::CharacterManager::createCharacter() void MWState::CharacterManager::clearCurrentCharacter() { mCurrent = 0; -} \ No newline at end of file +} + +std::vector::const_iterator MWState::CharacterManager::begin() const +{ + return mCharacters.begin(); +} + +std::vector::const_iterator MWState::CharacterManager::end() const +{ + return mCharacters.end(); +} diff --git a/apps/openmw/mwstate/charactermanager.hpp b/apps/openmw/mwstate/charactermanager.hpp index 543e0c94af..ce82ccc46a 100644 --- a/apps/openmw/mwstate/charactermanager.hpp +++ b/apps/openmw/mwstate/charactermanager.hpp @@ -33,6 +33,10 @@ namespace MWState ///< Create new character within saved game management void clearCurrentCharacter(); + + std::vector::const_iterator begin() const; + + std::vector::const_iterator end() const; }; } diff --git a/apps/openmw/mwstate/statemanagerimp.cpp b/apps/openmw/mwstate/statemanagerimp.cpp index 0f4e1e020d..9d8fcafb02 100644 --- a/apps/openmw/mwstate/statemanagerimp.cpp +++ b/apps/openmw/mwstate/statemanagerimp.cpp @@ -97,4 +97,14 @@ void MWState::StateManager::saveGame (const Slot *slot) MWState::Character *MWState::StateManager::getCurrentCharacter() { return mCharacterManager.getCurrentCharacter(); -} \ No newline at end of file +} + +MWState::StateManager::CharacterIterator MWState::StateManager::characterBegin() +{ + return mCharacterManager.begin(); +} + +MWState::StateManager::CharacterIterator MWState::StateManager::characterEnd() +{ + return mCharacterManager.end(); +} diff --git a/apps/openmw/mwstate/statemanagerimp.hpp b/apps/openmw/mwstate/statemanagerimp.hpp index 8d1ff0641c..764a09a7e1 100644 --- a/apps/openmw/mwstate/statemanagerimp.hpp +++ b/apps/openmw/mwstate/statemanagerimp.hpp @@ -38,6 +38,10 @@ namespace MWState /// \note Slot must belong to the current character. virtual Character *getCurrentCharacter(); + + virtual CharacterIterator characterBegin(); + + virtual CharacterIterator characterEnd(); }; }