GteRangeIteration.h
Go to the documentation of this file.
1 // David Eberly, Geometric Tools, Redmond WA 98052
2 // Copyright (c) 1998-2017
3 // Distributed under the Boost Software License, Version 1.0.
4 // http://www.boost.org/LICENSE_1_0.txt
5 // http://www.geometrictools.com/License/Boost/LICENSE_1_0.txt
6 // File Version: 3.0.0 (2016/06/19)
7 
8 #pragma once
9 
10 #include <GTEngineDEF.h>
11 #include <iterator>
12 #include <type_traits>
13 
14 // For information on range-based for-loops, see
15 // http://en.cppreference.com/w/cpp/language/range-for
16 
17 namespace gte
18 {
19 
20 // The function gte::reverse supports reverse iteration in range-based
21 // for-loops using the auto keyword. For example,
22 //
23 // std::vector<int> numbers(4);
24 // int i = 0;
25 // for (auto& number : numbers)
26 // {
27 // number = i++;
28 // std::cout << number << ' ';
29 // }
30 // // Output: 0 1 2 3
31 //
32 // for (auto& number : gte::reverse(numbers))
33 // {
34 // std::cout << number << ' ';
35 // }
36 // // Output: 3 2 1 0
37 
38 template <typename Iterator>
40 {
41 public:
42  ReversalObject(Iterator begin, Iterator end)
43  :
44  mBegin(begin),
45  mEnd(end)
46  {
47  }
48 
49  Iterator begin() const { return mBegin; }
50  Iterator end() const { return mEnd; }
51 
52 private:
53  Iterator mBegin, mEnd;
54 };
55 
56 template
57 <
58  typename Iterable,
59  typename Iterator = decltype(std::begin(std::declval<Iterable>())),
60  typename ReverseIterator = std::reverse_iterator<Iterator>
61 >
63 {
65  ReverseIterator(std::end(range)),
66  ReverseIterator(std::begin(range)));
67 }
68 
69 }
ReversalObject< ReverseIterator > reverse(Iterable &&range)
GLuint GLuint end
Definition: glcorearb.h:470
Iterator begin() const
Iterator end() const
GLenum GLint * range
Definition: glcorearb.h:1920
ReversalObject(Iterator begin, Iterator end)


geometric_tools_engine
Author(s): Yijiang Huang
autogenerated on Thu Jul 18 2019 04:00:01