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

# User Rev Content
1 sf-pippijn 1.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 sf-pippijn 1.2 T &operator[] (int n) { return data[offset + n]; }
21     T const &operator[] (int n) const { return data[offset + n]; }
22    
23 sf-pippijn 1.1 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     };