Sacado Package Browser (Single Doxygen Collection)
Version of the Day
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
•
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
src
mpl
Sacado_mpl_range_c.hpp
Go to the documentation of this file.
1
// @HEADER
2
// ***********************************************************************
3
//
4
// Sacado Package
5
// Copyright (2006) Sandia Corporation
6
//
7
// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
8
// the U.S. Government retains certain rights in this software.
9
//
10
// This library is free software; you can redistribute it and/or modify
11
// it under the terms of the GNU Lesser General Public License as
12
// published by the Free Software Foundation; either version 2.1 of the
13
// License, or (at your option) any later version.
14
//
15
// This library is distributed in the hope that it will be useful, but
16
// WITHOUT ANY WARRANTY; without even the implied warranty of
17
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18
// Lesser General Public License for more details.
19
//
20
// You should have received a copy of the GNU Lesser General Public
21
// License along with this library; if not, write to the Free Software
22
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
23
// USA
24
// Questions? Contact David M. Gay (dmgay@sandia.gov) or Eric T. Phipps
25
// (etphipp@sandia.gov).
26
//
27
// ***********************************************************************
28
// @HEADER
29
30
#ifndef SACADO_MPL_RANGE_C_HPP
31
#define SACADO_MPL_RANGE_C_HPP
32
33
#include "
Sacado_mpl_none.hpp
"
34
#include "
Sacado_mpl_size.hpp
"
35
#include "
Sacado_mpl_begin.hpp
"
36
#include "
Sacado_mpl_end.hpp
"
37
#include "
Sacado_mpl_next.hpp
"
38
#include "
Sacado_mpl_at.hpp
"
39
#include "
Sacado_mpl_deref.hpp
"
40
#include "
Sacado_mpl_integral_c.hpp
"
41
42
namespace
Sacado {
43
44
namespace
mpl {
45
46
// range_c tag for mpl operations
47
struct
range_c_tag
{};
48
49
// range_c
50
template
<
class
T, T N, T M, T Delta = 1>
51
struct
range_c
{
52
typedef
range_c_tag
tag
;
53
typedef
range_c
type
;
54
static
const
int
sz
= (M-N+Delta-1)/Delta;
55
typedef
T
integral_type
;
56
static
const
int
start_value
= N;
57
static
const
int
end_value
= M;
58
static
const
int
step_value
= Delta;
59
};
60
61
// iterator
62
template
<
class
Range,
int
Pos>
63
struct
range_c_iterator
{
64
static
const
int
value
= Pos;
65
};
66
67
// size
68
template
<>
69
struct
size_impl
<
range_c_tag
> {
70
template
<
class
Range>
71
struct
apply
{
72
static
const
int
value = Range::sz;
73
};
74
};
75
76
// begin
77
template
<>
78
struct
begin_impl
<
range_c_tag
> {
79
template
<
class
Range>
80
struct
apply
{
81
typedef
range_c_iterator<Range,0>
type
;
82
};
83
};
84
85
// end
86
template
<>
87
struct
end_impl
<
range_c_tag
> {
88
template
<
class
Range>
89
struct
apply
{
90
typedef
range_c_iterator<Range,Range::sz>
type
;
91
};
92
};
93
94
// next
95
template
<
class
Range,
int
Pos>
96
struct
next
<
range_c_iterator
<Range,Pos> > {
97
typedef
range_c_iterator<Range,Pos+1>
type
;
98
};
99
100
101
102
// at
103
template
<
int
Pos>
104
struct
at_impl
<
range_c_tag
, Pos> {
105
template
<
class
Range>
106
struct
apply
{
107
typedef
integral_c
<
typename
Range::integral_type,
108
Range::start_value + Range::step_value*Pos>
type
;
109
};
110
};
111
112
// deref
113
template
<
class
Range,
int
Pos>
114
struct
deref
<
range_c_iterator
<Range,Pos> > :
mpl::at
<Range,Pos> {};
115
116
}
117
}
118
119
#endif
Sacado::mpl::at_impl
Definition:
Sacado_mpl_at.hpp:39
Sacado::mpl::at_impl< range_c_tag, Pos >::apply::type
integral_c< typename Range::integral_type, Range::start_value+Range::step_value *Pos > type
Definition:
Sacado_mpl_range_c.hpp:108
Sacado_mpl_begin.hpp
Sacado_mpl_deref.hpp
Sacado::mpl::range_c_tag
Definition:
Sacado_mpl_range_c.hpp:47
Sacado::mpl::range_c::integral_type
T integral_type
Definition:
Sacado_mpl_range_c.hpp:55
Sacado::mpl::range_c::end_value
static const int end_value
Definition:
Sacado_mpl_range_c.hpp:57
Sacado::mpl::at
Definition:
Sacado_mpl_at.hpp:42
Sacado::mpl::range_c_iterator
Definition:
Sacado_mpl_range_c.hpp:63
Sacado::mpl::range_c::step_value
static const int step_value
Definition:
Sacado_mpl_range_c.hpp:58
Sacado::mpl::end_impl< range_c_tag >::apply::type
range_c_iterator< Range, Range::sz > type
Definition:
Sacado_mpl_range_c.hpp:90
Sacado_mpl_integral_c.hpp
Sacado::mpl::size_impl
Definition:
Sacado_mpl_size.hpp:39
Sacado::mpl::integral_c
Definition:
Sacado_mpl_integral_c.hpp:41
Sacado::mpl::range_c::start_value
static const int start_value
Definition:
Sacado_mpl_range_c.hpp:56
Sacado_mpl_end.hpp
T
#define T
Definition:
Sacado_rad.hpp:573
Sacado::mpl::begin_impl< range_c_tag >::apply::type
range_c_iterator< Range, 0 > type
Definition:
Sacado_mpl_range_c.hpp:81
Sacado::mpl::range_c::type
range_c type
Definition:
Sacado_mpl_range_c.hpp:53
Sacado::mpl::next
Definition:
Sacado_mpl_next.hpp:39
Sacado_mpl_size.hpp
Sacado::mpl::next< range_c_iterator< Range, Pos > >::type
range_c_iterator< Range, Pos+1 > type
Definition:
Sacado_mpl_range_c.hpp:97
Sacado::mpl::begin_impl
Definition:
Sacado_mpl_begin.hpp:39
Sacado::mpl::end_impl
Definition:
Sacado_mpl_end.hpp:39
Sacado::mpl::range_c::sz
static const int sz
Definition:
Sacado_mpl_range_c.hpp:54
Sacado::mpl::range_c::tag
range_c_tag tag
Definition:
Sacado_mpl_range_c.hpp:52
Sacado::mpl::range_c
Definition:
Sacado_mpl_range_c.hpp:51
Sacado::mpl::range_c_iterator::value
static const int value
Definition:
Sacado_mpl_range_c.hpp:64
Sacado_mpl_at.hpp
Sacado::mpl::deref
Definition:
Sacado_mpl_deref.hpp:39
Sacado::mpl::apply
Definition:
Sacado_mpl_apply.hpp:67
Sacado_mpl_next.hpp
Sacado_mpl_none.hpp
Generated by
1.8.5