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

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 "slice out of bounds";
20 else if (container.size () == offset)
21 throw "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 }