Teuchos - Trilinos Tools Package Version of the Day
Loading...
Searching...
No Matches
Teuchos_ParameterEntry.hpp
Go to the documentation of this file.
1// @HEADER
2// *****************************************************************************
3// Teuchos: Common Tools Package
4//
5// Copyright 2004 NTESS and the Teuchos contributors.
6// SPDX-License-Identifier: BSD-3-Clause
7// *****************************************************************************
8// @HEADER
9
10#ifndef TEUCHOS_PARAMETER_ENTRY_H
11#define TEUCHOS_PARAMETER_ENTRY_H
12
16
18#include "Teuchos_any.hpp"
19#include "Teuchos_RCP.hpp"
20#include "Teuchos_ParameterEntryValidator.hpp"
21
22namespace Teuchos {
23
24#ifndef DOXYGEN_SHOULD_SKIP_THIS
25class ParameterList; // another parameter type (forward declaration)
26#endif
27
34class TEUCHOSPARAMETERLIST_LIB_DLL_EXPORT ParameterEntry {
35
36public:
37
40
42 typedef unsigned int ParameterEntryID;
43
45
47
48
51
53 ParameterEntry(const ParameterEntry& source);
54
57
59 template <typename T, typename = std::enable_if_t< ! std::is_same_v<std::decay_t<T>, ParameterEntry>>>
60 explicit ParameterEntry(
61 T&& value, bool isDefault = false, bool isList = false,
62 const std::string &docString = "",
64 );
65
67
69
70
73
76
84 template<typename T>
85 void setValue(
86 T value, bool isDefault = false,
87 const std::string &docString = "",
89 );
90
97 void setAnyValue(
98 const any &value, bool isDefault = false
99 );
100
102 void setValidator(
104 );
105
107 void setDocString(const std::string &docString);
108
111 bool isDefault = false,
112 const std::string &docString = ""
113 );
114
116
118
119
125 template<typename T>
126 inline
127 T& getValue(T *ptr) const;
128
133 inline
134 any& getAny(bool activeQry = true);
135
140 inline
141 const any& getAny(bool activeQry = true) const;
142
144
146
147
149 inline
150 bool isUsed() const;
151
153 bool isList() const;
154
156 template <typename T>
157 inline
158 bool isType() const;
159
161 bool isArray() const;
162 //
164 bool isTwoDArray() const;
165
167 inline
168 bool isDefault() const;
169
171 inline
172 std::string docString() const;
173
175 inline
177
179
181
182
188 std::ostream& leftshift(std::ostream& os, bool printFlags = true) const;
189
193 static const std::string& getTagName(){
194 static const std::string tagName = "Parameter";
195 return tagName;
196 }
197
199
200private:
201
203 void reset();
204
206 any val_;
207
209 mutable bool isUsed_;
210
212 mutable bool isDefault_;
213
215 std::string docString_;
216
218//use pragmas to disable some false positive warnings for windows sharedlib export
219#ifdef _MSC_VER
220#pragma warning(push)
221#pragma warning(disable:4251)
222#endif
224#ifdef _MSC_VER
225#pragma warning(pop)
226#endif
227
228};
229
235template<typename T>
236inline T& getValue( const ParameterEntry &entry )
237{
238 return entry.getValue(static_cast<T*>(0));
239}
240
246template<typename T>
248{
249 return entry->getValue(static_cast<T*>(0));
250}
251
255inline bool operator==(const ParameterEntry& e1, const ParameterEntry& e2)
256{
257 return (
258 e1.getAny() == e2.getAny()
259 && e1.isList()== e2.isList()
260 && e1.isUsed() == e2.isUsed()
261 && e1.isDefault() == e2.isDefault()
262 );
263}
264
268inline bool operator!=(const ParameterEntry& e1, const ParameterEntry& e2)
269{
270 return !( e1 == e2 );
271}
272
276inline std::ostream& operator<<(std::ostream& os, const ParameterEntry& e)
277{
278 return e.leftshift(os);
279}
280
281// ///////////////////////////////////////////
282// Inline and Template Function Definitions
283
284// Constructor/Destructor
285
286template<typename T, typename>
287inline
289 T&& value_in,
290 bool isDefault_in,
291 bool /*isList_in*/, // 2007/11/26: rabartl: ToDo: This arg is ignored and should be removed!
292 const std::string &docString_in,
293 RCP<const ParameterEntryValidator> const& validator_in
294 )
295 : val_(std::forward<T>(value_in)),
296 isUsed_(false),
297 isDefault_(isDefault_in),
298 docString_(docString_in),
299 validator_(validator_in)
300{
301}
302
303// Set Methods
304
305template<typename T>
306inline
308 T value_in, bool isDefault_in, const std::string &docString_in,
309 RCP<const ParameterEntryValidator> const& validator_in
310 )
311{
312 val_ = value_in;
313 isDefault_ = isDefault_in;
314 if(docString_in.length())
315 docString_ = docString_in;
316 if(validator_in.get())
317 validator_ = validator_in;
318}
319
320// Get Methods
321
322template<typename T>
323inline
324T& ParameterEntry::getValue(T * /*ptr*/) const
325{
326 isUsed_ = true;
327 return const_cast<T&>(Teuchos::any_cast<T>( val_ ));
328}
329
330inline
332{
333 if (activeQry == true) {
334 isUsed_ = true;
335 }
336 return val_;
337}
338
339inline
340const any& ParameterEntry::getAny(bool activeQry) const
341{
342 if (activeQry == true) {
343 isUsed_ = true;
344 }
345 return val_;
346}
347
348// Attribute Methods
349
350inline
352{ return isUsed_; }
353
354template <typename T>
355inline
357{ return val_.type() == typeid(T); }
358
359inline
361{ return isDefault_; }
362
363inline
364std::string ParameterEntry::docString() const
365{ return docString_; }
366
367inline
370{ return validator_; }
371
372
373} // namespace Teuchos
374
375
376#endif
Teuchos header file which uses auto-configuration information to include necessary C++ headers.
Reference-counted pointer class and non-member templated function implementations.
Modified boost::any class for holding a templated value.
void setValidator(RCP< const ParameterEntryValidator > const &validator)
Set the validator.
bool isType() const
Test the type of the data being contained.
bool isUsed() const
Return whether or not the value has been used; i.e., whether or not the value has been retrieved via ...
any & getAny(bool activeQry=true)
Direct access to the Teuchos::any data value underlying this object. The bool argument activeQry (def...
T & getValue(T *ptr) const
Templated get method that uses the input pointer type to determine the type of parameter to return.
ParameterList & setList(bool isDefault=false, const std::string &docString="")
Create a parameter entry that is an empty list.
ParameterEntry & operator=(const ParameterEntry &source)
Replace the current parameter entry with source.
RCP< const ParameterEntryValidator > validator() const
Return the (optional) validator object.
ParameterEntry()
Default Constructor.
bool isTwoDArray() const
Test if the type of data being contained is a Teuchos::TwoDArray.
void setValue(T value, bool isDefault=false, const std::string &docString="", RCP< const ParameterEntryValidator > const &validator=null)
Templated set method that uses the input value type to determine the type of parameter.
T & getValue(const ParameterEntry &entry)
A templated helper function for returning the value of type T held in the ParameterEntry object,...
bool operator==(const ParameterEntry &e1, const ParameterEntry &e2)
Returns true if two ParameterEntry objects are equal.
bool isArray() const
Test if the type of data being contained is a Teuchos::Array.
std::ostream & leftshift(std::ostream &os, bool printFlags=true) const
Output a non-list parameter to the given output stream.
void setDocString(const std::string &docString)
Set the documentation std::string.
std::string docString() const
Return the (optional) documentation std::string.
bool isList() const
Return whether or not the value itself is a list.
bool operator!=(const ParameterEntry &e1, const ParameterEntry &e2)
Returns true if two ParameterEntry objects are not equal.
void setAnyValue(const any &value, bool isDefault=false)
Set the value as an any object.
T & getValue(RCP< const ParameterEntry > entry)
A templated helper function for returning the value of type T held in the ParameterEntry object,...
std::ostream & operator<<(std::ostream &os, const ParameterEntry &e)
Output stream operator for handling the printing of parameter entries.
static const std::string & getTagName()
Get the string that should be used as the tag name for all parameters when they are serialized to xml...
bool isDefault() const
Indicate whether this entry takes on the default value.
A list of parameters of arbitrary type.
Ptr< T > ptr(T *p)
Create a pointer to an object from a raw pointer.
Smart reference counting pointer class for automatic garbage collection.
T * get() const
Get the raw C++ pointer to the underlying object.
Modified boost::any class, which is a container for a templated value.
ValueType & any_cast(any &operand)
Used to extract the templated value held in Teuchos::any to a given value type.
const std::type_info & type() const
Return the type of value being stored.
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos,...