ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/cf.schmorp.de/dclient/include/adt/slice.h
Revision: 1.2
Committed: Wed Oct 20 08:33:39 2010 UTC (16 years 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

# User Rev Content
1 sf-pippijn 1.1 #pragma once
2    
3     template<typename Container>
4 sf-pippijn 1.2 struct slice_view
5 sf-pippijn 1.1 {
6 sf-pippijn 1.2 typedef Container container_type;
7 sf-pippijn 1.1
8 sf-pippijn 1.2 typedef typename container_type::const_iterator const_iterator;
9     typedef typename container_type::iterator iterator;
10 sf-pippijn 1.1
11 sf-pippijn 1.2 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 sf-pippijn 1.1 : 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 sf-pippijn 1.2 const_reverse_iterator rbegin () const { return container.rbegin () + offset; }
28     const_reverse_iterator rend () const { return container.rend (); }
29    
30 sf-pippijn 1.1 private:
31     container_type const &container;
32     size_t offset;
33     };
34    
35     template<typename Container>
36 sf-pippijn 1.2 slice_view<Container>
37 sf-pippijn 1.1 slice (Container const &container, size_t offset)
38     {
39 sf-pippijn 1.2 return slice_view<Container> (container, offset);
40 sf-pippijn 1.1 }