TPIE

11a2c2d
array_view.h
Go to the documentation of this file.
1 // -*- mode: c++; tab-width: 4; indent-tabs-mode: t; eval: (progn (c-set-style "stroustrup") (c-set-offset 'innamespace 0)); -*-
2 // vi:set ts=4 sts=4 sw=4 noet :
3 // Copyright 2012, The TPIE development team
4 //
5 // This file is part of TPIE.
6 //
7 // TPIE is free software: you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License as published by the
9 // Free Software Foundation, either version 3 of the License, or (at your
10 // option) any later version.
11 //
12 // TPIE is distributed in the hope that it will be useful, but WITHOUT ANY
13 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
15 // License for more details.
16 //
17 // You should have received a copy of the GNU Lesser General Public License
18 // along with TPIE. If not, see <http://www.gnu.org/licenses/>
19 
23 
24 #ifndef __ARRAY_VIEW_H__
25 #define __ARRAY_VIEW_H__
26 
27 #include <vector>
28 #include <tpie/array.h>
29 #include <tpie/array_view_base.h>
30 #include <tpie/internal_vector.h>
31 #include <type_traits>
32 
33 namespace tpie {
34 
35 
45 
46 template <typename T>
47 class array_view: public array_view_base<T> {
48 public:
52  inline array_view(const array_view & o):
53  array_view_base<T>(o) {}
54 
58  template <typename A>
59  inline array_view(std::vector<T, A> & v):
60  array_view_base<T>(&*(v.begin()), &(*v.end())) {}
61 
66  array_view_base<T>(&*(v.begin()), &(*v.end())) {}
67 
72  array_view_base<T>(&*(v.begin()), &(*v.end())) {}
73 
80  template <typename A>
81  inline array_view(std::vector<T, A> & v, size_t start, size_t end):
82  array_view_base<T>(&v[start], &v[end]) {}
83 
90  inline array_view(tpie::array<T> & v, size_t start, size_t end):
91  array_view_base<T>(&v[start], &v[end]) {}
92 
97  inline array_view(T * start, T * end):
98  array_view_base<T>(start, end) {}
99 
106  inline array_view(T * start, size_t size):
107  array_view_base<T>(start, start+size) {}
108 };
109 
110 template <typename T>
111 class array_view<const T>: public array_view_base<const T> {
112 public:
113  inline array_view(array_view<T> o):
114  array_view_base<const T>(&*(o.begin()), &*(o.end())) {}
115 
116  template <typename A>
117  inline array_view(const std::vector<T, A> & v):
118  array_view_base<const T>(&*(v.begin()), &*(v.end())) {}
119 
120  inline array_view(const tpie::array<T> & v):
121  array_view_base<const T>(&*(v.begin()), &*(v.end())) {}
122 
123  inline array_view(const tpie::internal_vector<T> & v):
124  array_view_base<const T>(&*(v.begin()), &(*v.end())) {}
125 
126  template <typename A>
127  inline array_view(const std::vector<T, A> & v, size_t start, size_t end):
128  array_view_base<const T>(&v[start], &v[end]) {}
129 
130  inline array_view(const tpie::array<T> & v, size_t start, size_t end):
131  array_view_base<const T>(&v[start], &v[end]) {}
132 
133  inline array_view(const T * start, const T * end):
134  array_view_base<const T>(start, end) {}
135 
136  inline array_view(const T * start, size_t size):
137  array_view_base<const T>(start, start+size) {}
138 };
139 
140 
141 template <typename T>
144 }
145 
146 template <typename T>
147 array_view<T> make_array_view(T * start, T * end) {
148  return array_view<T>(start, end);
149 }
150 
151 template <typename T>
152 array_view<typename T::value_type> make_array_view(T & s) {
153  return make_array_view(s.begin(), s.end());
154 }
155 
156 template <typename T>
157 array_view<typename T::value_type> make_array_view(T & s, size_t start, size_t end) {
158  return make_array_view(s.begin() + start, s.begin() + end);
159 }
160 
161 template <typename T>
162 array_view<const typename T::value_type> make_array_view(const T & s) {
163  return make_array_view(s.begin(), s.end());
164 }
165 
166 template <typename T>
167 array_view<const typename T::value_type> make_array_view(const T & s, size_t start, size_t end) {
168  return make_array_view(s.begin() + start, s.begin() + end);
169 }
170 
171 
172 
173 
174 } //namespace tpie
175 
176 #endif // __ARRAY_VIEW_H__
internal_vector.h
tpie::array_view::array_view
array_view(const array_view &o)
Copy constructor.
Definition: array_view.h:52
array_view_base.h
tpie::array_view_base::begin
iterator begin() const
Return an iterator to the beginning of the array.
Definition: array_view_base.h:151
tpie::array_view::array_view
array_view(T *start, size_t size)
Pointer+offset constructor.
Definition: array_view.h:106
tpie::array< T >
tpie::array::begin
iterator begin()
Return an iterator to the beginning of the array.
Definition: array.h:312
tpie::internal_vector::begin
iterator begin()
Get an iterator to the beginning of the structure.
Definition: internal_vector.h:115
array.h
tpie::internal_vector
A generic internal vector.
Definition: internal_vector.h:37
tpie::array_view_base::size
size_t size() const
Get number of elements in the array.
Definition: array_view_base.h:108
tpie::array_view_base::end
iterator end() const
Return an iterator to the end of the array.
Definition: array_view_base.h:158
tpie::array_view::array_view
array_view(std::vector< T, A > &v, size_t start, size_t end)
std::vector subsequence.
Definition: array_view.h:81
tpie::array_view::array_view
array_view(std::vector< T, A > &v)
std::vector constructor.
Definition: array_view.h:59
tpie::array::end
iterator end()
Return an iterator to the end of the array.
Definition: array.h:326
tpie::array_view::array_view
array_view(T *start, T *end)
Pointer constructor.
Definition: array_view.h:97
tpie::array_view::array_view
array_view(tpie::internal_vector< T > &v)
tpie::internal_vector constructor.
Definition: array_view.h:71
tpie::array_view_base
Base class for array_view.
Definition: array_view_base.h:40
tpie::array_view::array_view
array_view(tpie::array< T > &v, size_t start, size_t end)
tpie::array subsequence.
Definition: array_view.h:90
tpie::array_view::array_view
array_view(tpie::array< T > &v)
tpie::array constructor.
Definition: array_view.h:65
tpie
Definition: access_type.h:26
tpie::internal_vector::end
iterator end()
Get an iterator to the end of the structure.
Definition: internal_vector.h:125
tpie::array_view
Encapsulation of two pointers from any random access container.
Definition: array_view.h:47