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