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, 5 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

# 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 sf-pippijn 1.3 throw std::logic_error ("slice out of bounds");
20 sf-pippijn 1.1 else if (container.size () == offset)
21 sf-pippijn 1.3 throw std::logic_error ("empty slice interval");
22 sf-pippijn 1.1 }
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 }