ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/deliantra/dclient/include/adt/unordered_vector.h
Revision: 1.2
Committed: Mon Oct 18 14:11:43 2010 UTC (16 years ago) by sf-pippijn
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +0 -0 lines
State: FILE REMOVED
Log Message:
check and log but do not die when ncurses stuff fails

File Contents

# User Rev Content
1 sf-pippijn 1.1 #pragma once
2    
3     template<typename T>
4     void
5     unordered_erase (std::vector<T> &vec, typename std::vector<T>::iterator pos)
6     {
7     vec.at (vec.end () - pos) = vec.back ();
8     vec.pop_back ();
9     }
10    
11     template<typename T>
12     void
13     unordered_erase (std::vector<T> &vec, typename std::vector<T>::size_type pos)
14     {
15     unordered_erase (vec, vec.begin () + pos);
16     }
17    
18     template<typename T>
19     void
20     unordered_erase (std::vector<T> &vec, typename std::vector<T>::const_reference element)
21     {
22     unordered_erase (vec, &element - &vec.front ());
23     }
24    
25     template<typename T>
26     struct unordered_vector
27     {
28     typedef std::vector<T> vector_type;
29    
30     typedef typename vector_type::value_type value_type;
31     typedef typename vector_type::pointer pointer;
32     typedef typename vector_type::const_pointer const_pointer;
33     typedef typename vector_type::reference reference;
34     typedef typename vector_type::const_reference const_reference;
35     typedef typename vector_type::iterator iterator;
36     typedef typename vector_type::const_iterator const_iterator;
37     typedef typename vector_type::reverse_iterator reverse_iterator;
38     typedef typename vector_type::const_reverse_iterator const_reverse_iterator;
39     typedef typename vector_type::size_type size_type;
40     typedef typename vector_type::difference_type difference_type;
41    
42     iterator begin () { return items.begin (); }
43     iterator end () { return items.end (); }
44     const_iterator begin () const { return items.begin (); }
45     const_iterator end () const { return items.end (); }
46    
47     void push_back (value_type const &x) { return items.push_back (x); }
48    
49     reference front () { return items.front (); }
50     const_reference front () const { return items.front (); }
51     reference back () { return items.back (); }
52     const_reference back () const { return items.back (); }
53    
54     reference at (size_type n) { return items.at (n); }
55     const_reference at (size_type n) const { return items.at (n); }
56    
57     void pop_back () { return items.pop_back (); }
58    
59     size_type size () const { return items.size (); }
60     bool empty () const { return items.empty (); }
61    
62     void erase (iterator pos) { return unordered_erase (items, pos); }
63     void erase (size_type pos) { return unordered_erase (items, pos); }
64     void erase (const_reference elt) { return unordered_erase (items, elt); }
65    
66     vector_type items;
67     };