ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/dclient/include/adt/map_vector.h
Revision: 1.2
Committed: Wed Oct 20 08:33:38 2010 UTC (13 years, 8 months ago) by sf-pippijn
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +3 -0 lines
Log Message:
2 glyphs / map space

File Contents

# Content
1 #pragma once
2
3 #include <deque>
4 #include <cstddef>
5
6 template<typename T>
7 struct map_vector
8 {
9 typedef std::deque<T> container_type;
10
11 typedef typename container_type:: iterator iterator;
12 typedef typename container_type::const_iterator const_iterator;
13
14 T &front () { return data.front (); }
15 T const &front () const { return data.front (); }
16
17 T &at (int n) { return data.at (offset + n); }
18 T const &at (int n) const { return data.at (offset + n); }
19
20 T &operator[] (int n) { return data[offset + n]; }
21 T const &operator[] (int n) const { return data[offset + n]; }
22
23 bool has (int n) const { return offset + n >= 0 && offset + n < size (); }
24
25 void clear () { return data.clear (); }
26
27 int size () const
28 {
29 return data.size ();
30 }
31
32 void ensure (int x)
33 {
34 while (offset + x < 0)
35 {
36 data.emplace_front ();
37 ++offset;
38 }
39 while (offset + x >= size ())
40 {
41 data.emplace_back ();
42 }
43 }
44
45 int low () const { return -offset; }
46 int high () const { return data.size () + low (); }
47
48 iterator begin () { return data.begin (); }
49 iterator end () { return data.end (); }
50 const_iterator begin () const { return data.begin (); }
51 const_iterator end () const { return data.end (); }
52
53 map_vector ()
54 : offset (0)
55 {
56 }
57
58 private:
59 long offset;
60 container_type data;
61 };