Rheolef  7.2
an efficient C++ finite element environment
vec_range.h
Go to the documentation of this file.
1 #ifndef _RHEO_VEC_RANGE_H
2 #define _RHEO_VEC_RANGE_H
23 // example :
24 // x[range(0,n)] = y;
25 // x = y[range(0,m)];
26 
27 # include "rheolef/vec.h"
28 
29 namespace rheolef {
30 
31 template <class T, class M = rheo_default_memory_model>
32 class vec_range {
33 public:
34 
35 // typedef:
36 
37  typedef typename vec<T,M>::size_type size_type;
39  typedef range range_type;
40  typedef T value_type;
41  typedef typename vec<T,M>::iterator iterator;
43 
44 // allocator/deallocator:
45 
46  vec_range (const vec<T,M>& u, const range_type& r) : _u(u), _r(r) {}
47  vec_range (const vec_range_const<T,M>& ur) : _u(ur._u), _r(ur._r) {}
48 
49 // accessors:
50 
51  size_type size() const { return _r.size(); }
52  iterator begin() { return _u.begin() + _r.start(); }
53  iterator end() { return begin() + size(); }
54  const_iterator begin() const { return _u.begin() + _r.start(); }
55  const_iterator end() const { return begin() + size(); }
56 
57 protected:
58  friend class vec<T,M>;
59  friend class vec_range_const<T,M>;
60 // data:
63 };
64 template <class T, class M = rheo_default_memory_model>
66 public:
67 
68 // typedef:
69 
70  typedef typename vec<T,M>::size_type size_type;
72  typedef range range_type;
73  typedef T value_type;
75 
76 // allocator/deallocator:
77 
78  vec_range_const (const vec<T,M>& u, const range_type& r) : _u(u), _r(r) {}
79  vec_range_const (const vec_range_const<T,M>& ur) : _u(ur._u), _r(ur._r) {}
80  vec_range_const (const vec_range<T,M>& ur) : _u(ur._u), _r(ur._r) {}
81 
82 // accessors:
83 
84  size_type size() const { return _r.size(); }
85  const_iterator begin() const { return _u.begin() + _r.start(); }
86  const_iterator end() const { return begin() + size(); }
87 
88 protected:
89  friend class vec<T,M>;
90 // data:
93 };
94 
95 } // namespace rheolef
96 #endif // _RHEO_VEC_RANGE_H
vec< T, M >::difference_type difference_type
Definition: vec_range.h:71
const_iterator begin() const
Definition: vec_range.h:85
vec< T, M >::size_type size_type
Definition: vec_range.h:70
size_type size() const
Definition: vec_range.h:84
vec_range_const(const vec_range_const< T, M > &ur)
Definition: vec_range.h:79
vec_range_const(const vec< T, M > &u, const range_type &r)
Definition: vec_range.h:78
vec< T, M >::const_iterator const_iterator
Definition: vec_range.h:74
const_iterator end() const
Definition: vec_range.h:86
vec_range_const(const vec_range< T, M > &ur)
Definition: vec_range.h:80
vec< T, M >::difference_type difference_type
Definition: vec_range.h:38
vec< T, M > _u
Definition: vec_range.h:61
const_iterator begin() const
Definition: vec_range.h:54
vec< T, M >::size_type size_type
Definition: vec_range.h:37
size_type size() const
Definition: vec_range.h:51
vec< T, M >::iterator iterator
Definition: vec_range.h:41
vec< T, M >::const_iterator const_iterator
Definition: vec_range.h:42
iterator end()
Definition: vec_range.h:53
const_iterator end() const
Definition: vec_range.h:55
vec_range(const vec< T, M > &u, const range_type &r)
Definition: vec_range.h:46
iterator begin()
Definition: vec_range.h:52
vec_range(const vec_range_const< T, M > &ur)
Definition: vec_range.h:47
see the vec page for the full documentation
Definition: vec.h:79
Expr1::float_type T
Definition: field_expr.h:230
This file is part of Rheolef.
see the range page for the full documentation
Definition: range.h:61
size_type start() const
Definition: range.h:85
size_type size() const
Definition: range.h:86
Definition: leveque.h:25
Expr1::memory_type M
Definition: vec_expr_v2.h:416