ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/dclient/include/adt/slice.h
Revision: 1.3
Committed: Mon Feb 7 19:18:44 2011 UTC (13 years, 4 months ago) by sf-pippijn
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.2: +2 -2 lines
Log Message:
inventory_widget: don't fault on pgdn with only one item

by Jonathan Neuschäfer <j.neuschaefer@gmx.net>

File Contents

# Content
1 #pragma once
2
3 template<typename Container>
4 struct slice_view
5 {
6 typedef Container container_type;
7
8 typedef typename container_type::const_iterator const_iterator;
9 typedef typename container_type::iterator iterator;
10
11 typedef typename container_type::const_reverse_iterator const_reverse_iterator;
12 typedef typename container_type::reverse_iterator reverse_iterator;
13
14 slice_view (Container const &container, size_t offset)
15 : container (container)
16 , offset (offset)
17 {
18 if (container.size () < offset)
19 throw std::logic_error ("slice out of bounds");
20 else if (container.size () == offset)
21 throw std::logic_error ("empty slice interval");
22 }
23
24 const_iterator begin () const { return container.begin () + offset; }
25 const_iterator end () const { return container.end (); }
26
27 const_reverse_iterator rbegin () const { return container.rbegin () + offset; }
28 const_reverse_iterator rend () const { return container.rend (); }
29
30 private:
31 container_type const &container;
32 size_t offset;
33 };
34
35 template<typename Container>
36 slice_view<Container>
37 slice (Container const &container, size_t offset)
38 {
39 return slice_view<Container> (container, offset);
40 }