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