1 // Copyright (C) 2009, 2010, 2014, 2015 Ben Asselstine 2 // 3 // This program is free software; you can redistribute it and/or modify 4 // it under the terms of the GNU General Public License as published by 5 // the Free Software Foundation; either version 3 of the License, or 6 // (at your option) any later version. 7 // 8 // This program is distributed in the hope that it will be useful, 9 // but WITHOUT ANY WARRANTY; without even the implied warranty of 10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 // GNU Library General Public License for more details. 12 // 13 // You should have received a copy of the GNU General Public License 14 // along with this program; if not, write to the Free Software 15 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16 // 02110-1301, USA. 17 18 #pragma once 19 #ifndef STACKREFLIST_H 20 #define STACKREFLIST_H 21 22 #include <list> 23 #include <gtkmm.h> 24 class Stack; 25 class Player; 26 class Stacklist; 27 28 //! lightweight list of stacks. 29 class StackReflist: public std::list<Stack*> 30 { 31 public: 32 //! Default Constructor. 33 StackReflist(); 34 35 //! Alternate constructor. Create the list from a player's stacklist. 36 StackReflist(Stacklist *, bool skip_parked_stacks = false); 37 38 //! Alternate constructor. 39 StackReflist(std::list<Stack*> stacks, bool skip_parked_stacks = false); 40 41 //! Destructor. ~StackReflist()42 ~StackReflist() {}; 43 44 void addStack(Stack *s); 45 46 //! Return true if the stack with the given id was deleted from the list. 47 bool removeStack(guint32 stack_id); 48 49 //! Return true if this list contains the given stack id. 50 bool contains(guint32 stack_id) const; 51 52 guint32 countArmies() const; 53 54 StackReflist::iterator eraseStack(StackReflist::iterator it); 55 StackReflist::iterator eraseStack(StackReflist::iterator it, guint32 id); 56 57 void changeOwnership(Player *new_owner); 58 59 bool getIdOfStack(Stack *stack, guint32 &id); 60 Stack *getStackById(guint32 id) const; 61 private: 62 63 64 typedef std::map<guint32, Stack*> IdMap; 65 //! A map to quickly lookup the stack by it's unique id. 66 IdMap d_id; 67 68 }; 69 #endif 70