TPIE

2362a60
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__
Base class for array_view.
Base class for array_view.
array_view(std::vector< T, A > &v)
std::vector constructor.
Definition: array_view.h:59
array_view(const array_view &o)
Copy constructor.
Definition: array_view.h:52
Generic internal array with known memory requirements.
Generic internal vector with known memory requirements.
array_view(tpie::array< T > &v)
tpie::array constructor.
Definition: array_view.h:65
Encapsulation of two pointers from any random access container.
Definition: array_view.h:47
array_view(T *start, T *end)
Pointer constructor.
Definition: array_view.h:97
A generic internal vector.
size_t size() const
Get number of elements in the array.
iterator begin()
Get an iterator to the beginning of the structure.
iterator begin() const
Return an iterator to the beginning of the array.
array_view(std::vector< T, A > &v, size_t start, size_t end)
std::vector subsequence.
Definition: array_view.h:81
iterator end()
Return an iterator to the end of the array.
Definition: array.h:321
iterator begin()
Return an iterator to the beginning of the array.
Definition: array.h:307
iterator end()
Get an iterator to the end of the structure.
array_view(tpie::internal_vector< T > &v)
tpie::internal_vector constructor.
Definition: array_view.h:71
array_view(T *start, size_t size)
Pointer+offset constructor.
Definition: array_view.h:106
array_view(tpie::array< T > &v, size_t start, size_t end)
tpie::array subsequence.
Definition: array_view.h:90
iterator end() const
Return an iterator to the end of the array.