initial commit, lordsawar source, slightly modified
[lordsawar] / src / stackreflist.h
1 // Copyright (C) 2009 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 #ifndef STACKREFLIST_H
18 #define STACKREFLIST_H
19
20 #include <list>
21 #include <gtkmm.h>
22 class Stacklist;
23 class Stack;
24
25 //! lightweight list of stacks.
26 class StackReflist: public std::list<Stack*>
27 {
28 public:
29     //! Default Constructor.
30     StackReflist();
31
32     //! Alternate constructor.  Create the list from a player's stacklist.
33     StackReflist(Stacklist *, bool skip_parked_stacks = false);
34
35     //! Alternate constructor.
36     StackReflist(std::list<Stack*> stacks, bool skip_parked_stacks = false);
37
38     //! Destructor.
39     ~StackReflist();
40
41     void addStack(Stack *s);
42
43     //! Return true if the stack with the given id was deleted from the list.
44     bool removeStack(guint32 stack_id);
45
46     //! Return true if this list contains the given stack id.
47     bool contains(guint32 stack_id) const;
48
49     guint32 countArmies() const;
50
51     StackReflist::iterator eraseStack(StackReflist::iterator it);
52     StackReflist::iterator eraseStack(StackReflist::iterator it, guint32 id);
53 private:
54
55     Stack *getStackById(guint32 id) const;
56
57     typedef std::map<guint32, Stack*> IdMap;
58     //! A map to quickly lookup the stack by it's unique id.
59     IdMap d_id;
60
61 };
62 #endif