Sacado Package Browser (Single Doxygen Collection)
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
src
template
Sacado_TemplateManager.hpp
Go to the documentation of this file.
1
// $Id$
2
// $Source$
3
// @HEADER
4
// ***********************************************************************
5
//
6
// Sacado Package
7
// Copyright (2006) Sandia Corporation
8
//
9
// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
10
// the U.S. Government retains certain rights in this software.
11
//
12
// This library is free software; you can redistribute it and/or modify
13
// it under the terms of the GNU Lesser General Public License as
14
// published by the Free Software Foundation; either version 2.1 of the
15
// License, or (at your option) any later version.
16
//
17
// This library is distributed in the hope that it will be useful, but
18
// WITHOUT ANY WARRANTY; without even the implied warranty of
19
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20
// Lesser General Public License for more details.
21
//
22
// You should have received a copy of the GNU Lesser General Public
23
// License along with this library; if not, write to the Free Software
24
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
25
// USA
26
// Questions? Contact David M. Gay (dmgay@sandia.gov) or Eric T. Phipps
27
// (etphipp@sandia.gov).
28
//
29
// ***********************************************************************
30
// @HEADER
31
32
#ifndef SACADO_TEMPLATEMANAGER_HPP
33
#define SACADO_TEMPLATEMANAGER_HPP
34
35
#include <vector>
36
#include <typeinfo>
37
38
#include "Teuchos_RCP.hpp"
39
40
#include "
Sacado_mpl_size.hpp
"
41
#include "
Sacado_mpl_find.hpp
"
42
#include "
Sacado_mpl_for_each.hpp
"
43
#include "
Sacado_mpl_apply.hpp
"
44
45
#include "
Sacado_TemplateIterator.hpp
"
46
47
namespace
Sacado
{
48
50
70
template
<
typename
TypeSeq,
typename
BaseT,
typename
ObjectT>
71
class
TemplateManager
{
72
74
struct
type_info_less
{
75
bool
operator()
(
const
std::type_info*
a
,
const
std::type_info* b) {
76
return
a
->before(*b);
77
}
78
};
79
80
template
<
typename
BuilderOpT>
81
struct
BuildObject
{
82
std::vector< Teuchos::RCP<BaseT> >*
objects
;
83
const
BuilderOpT&
builder
;
84
BuildObject
(std::vector< Teuchos::RCP<BaseT> >& objects_,
85
const
BuilderOpT& builder_) :
86
objects
(&objects_),
builder
(builder_) {}
87
template
<
typename
T>
void
operator()
(
T
)
const
{
88
int
idx =
mpl::find<TypeSeq,T>::value
;
89
(*objects)[idx] =
builder
.template build<T>();
90
}
91
};
92
93
public
:
94
96
typedef
TemplateIterator<BaseT>
iterator
;
97
99
typedef
ConstTemplateIterator<BaseT>
const_iterator
;
100
102
struct
DefaultBuilderOp
{
103
105
template
<
class
ScalarT>
106
Teuchos::RCP<BaseT>
build
()
const
{
107
typedef
typename
Sacado::mpl::apply<ObjectT,ScalarT>::type
type
;
108
return
Teuchos::rcp(
dynamic_cast<
BaseT*
>
(
new
type
) );
109
}
110
111
};
112
114
TemplateManager
();
115
117
~TemplateManager
();
118
120
template
<
typename
BuilderOpT>
121
void
buildObjects
(
const
BuilderOpT& builder);
122
124
void
buildObjects
();
125
127
template
<
typename
ScalarT>
128
Teuchos::RCP<BaseT>
getAsBase
();
129
131
template
<
typename
ScalarT>
132
Teuchos::RCP<const BaseT>
getAsBase
()
const
;
133
135
template
<
typename
ScalarT>
136
Teuchos::RCP< typename Sacado::mpl::apply<ObjectT,ScalarT>::type >
getAsObject
();
137
139
template
<
typename
ScalarT>
140
Teuchos::RCP< const typename Sacado::mpl::apply<ObjectT,ScalarT>::type >
getAsObject
()
const
;
141
143
typename
Sacado::TemplateManager<TypeSeq,BaseT,ObjectT>::iterator
begin
();
144
146
typename
Sacado::TemplateManager<TypeSeq,BaseT,ObjectT>::const_iterator
147
begin
()
const
;
148
150
typename
Sacado::TemplateManager<TypeSeq,BaseT,ObjectT>::iterator
end
();
151
153
typename
Sacado::TemplateManager<TypeSeq,BaseT,ObjectT>::const_iterator
154
end
()
const
;
155
156
private
:
157
159
std::vector< Teuchos::RCP<BaseT> >
objects
;
160
161
};
162
163
}
164
165
// Include template definitions
166
#include "
Sacado_TemplateManagerImp.hpp
"
167
168
#endif
a
a
Definition
Sacado_CacheFad_Ops.hpp:426
Sacado_TemplateIterator.hpp
Sacado_TemplateManagerImp.hpp
Sacado_mpl_apply.hpp
Sacado_mpl_find.hpp
Sacado_mpl_for_each.hpp
Sacado_mpl_size.hpp
T
#define T
Definition
Sacado_rad.hpp:573
Sacado::ConstTemplateIterator
Definition
Sacado_TemplateIterator.hpp:118
Sacado::TemplateIterator
Definition
Sacado_TemplateIterator.hpp:50
Sacado::TemplateManager::getAsObject
Teuchos::RCP< typename Sacado::mpl::apply< ObjectT, ScalarT >::type > getAsObject()
Get RCP to object corrensponding to ScalarT as ObjectT<ScalarT>.
Definition
Sacado_TemplateManagerImp.hpp:88
Sacado::TemplateManager::end
Sacado::TemplateManager< TypeSeq, BaseT, ObjectT >::iterator end()
Return an iterator that points one past the last type object.
Definition
Sacado_TemplateManagerImp.hpp:123
Sacado::TemplateManager::TemplateManager
TemplateManager()
Default constructor.
Definition
Sacado_TemplateManagerImp.hpp:34
Sacado::TemplateManager::begin
Sacado::TemplateManager< TypeSeq, BaseT, ObjectT >::iterator begin()
Return an iterator that points to the first type object.
Definition
Sacado_TemplateManagerImp.hpp:107
Sacado::TemplateManager::iterator
TemplateIterator< BaseT > iterator
Typedef for iterator.
Definition
Sacado_TemplateManager.hpp:96
Sacado::TemplateManager::const_iterator
ConstTemplateIterator< BaseT > const_iterator
Typedef for const_iterator.
Definition
Sacado_TemplateManager.hpp:99
Sacado::TemplateManager::objects
std::vector< Teuchos::RCP< BaseT > > objects
Stores array of rcp's to objects of each type.
Definition
Sacado_TemplateManager.hpp:159
Sacado::TemplateManager::getAsBase
Teuchos::RCP< BaseT > getAsBase()
Get RCP to object corrensponding to ScalarT as BaseT.
Definition
Sacado_TemplateManagerImp.hpp:69
Sacado::TemplateManager::~TemplateManager
~TemplateManager()
Destructor.
Definition
Sacado_TemplateManagerImp.hpp:43
Sacado::TemplateManager::buildObjects
void buildObjects()
Build objects for each ScalarT using default builder.
Definition
Sacado_TemplateManagerImp.hpp:59
Sacado
Definition
Sacado_mpl_apply.hpp:39
Sacado::type
Sacado::TemplateManager::BuildObject::operator()
void operator()(T) const
Definition
Sacado_TemplateManager.hpp:87
Sacado::TemplateManager::BuildObject::builder
const BuilderOpT & builder
Definition
Sacado_TemplateManager.hpp:83
Sacado::TemplateManager::BuildObject::objects
std::vector< Teuchos::RCP< BaseT > > * objects
Definition
Sacado_TemplateManager.hpp:82
Sacado::TemplateManager::BuildObject::BuildObject
BuildObject(std::vector< Teuchos::RCP< BaseT > > &objects_, const BuilderOpT &builder_)
Definition
Sacado_TemplateManager.hpp:84
Sacado::TemplateManager::DefaultBuilderOp
The default builder class for building objects for each ScalarT.
Definition
Sacado_TemplateManager.hpp:102
Sacado::TemplateManager::DefaultBuilderOp::build
Teuchos::RCP< BaseT > build() const
Returns a new rcp for an object of type ObjectT<ScalarT>.
Definition
Sacado_TemplateManager.hpp:106
Sacado::TemplateManager::type_info_less
Implementation of < for type_info objects.
Definition
Sacado_TemplateManager.hpp:74
Sacado::TemplateManager::type_info_less::operator()
bool operator()(const std::type_info *a, const std::type_info *b)
Definition
Sacado_TemplateManager.hpp:75
Sacado::mpl::apply_wrap5< F, mpl::none, mpl::none, mpl::none, mpl::none, mpl::none >::type
F::template apply< mpl::none, mpl::none, mpl::none, mpl::none, mpl::none >::type type
Definition
Sacado_mpl_apply_wrap.hpp:84
Sacado::mpl::find::value
static const int value
Definition
Sacado_mpl_find.hpp:59
Generated by
1.17.0