Teuchos - Trilinos Tools Package Version of the Day
Loading...
Searching...
No Matches
Teuchos_VerboseObject.hpp
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_VERBOSE_OBJECT_HPP
11#define TEUCHOS_VERBOSE_OBJECT_HPP
12
13#include "Teuchos_RCP.hpp"
14#include "Teuchos_FancyOStream.hpp"
16
17
18namespace Teuchos {
19
20
34class TEUCHOSCORE_LIB_DLL_EXPORT VerboseObjectBase {
35public:
36
38
39
45 static void setDefaultOStream( const RCP<FancyOStream> &defaultOStream );
46
48 static RCP<FancyOStream> getDefaultOStream();
49
51
53
54
56 virtual ~VerboseObjectBase();
57
60 explicit
62 const RCP<FancyOStream> &oStream = Teuchos::null
63 );
64
70 virtual const VerboseObjectBase& setOStream(
71 const RCP<FancyOStream> &oStream) const;
72
79 virtual const VerboseObjectBase& setOverridingOStream(
80 const RCP<FancyOStream> &oStream) const;
81
83 virtual VerboseObjectBase& setLinePrefix(const std::string &linePrefix);
84
86
88
89
93 virtual RCP<FancyOStream> getOStream() const;
94
101 virtual RCP<FancyOStream> getOverridingOStream() const;
102
104 virtual std::string getLinePrefix() const;
105
107
109
110
124 virtual OSTab getOSTab(const int tabs = 1, const std::string &linePrefix = "") const;
125
127
128protected:
129
132 void initializeVerboseObjectBase(
133 const RCP<FancyOStream> &oStream = Teuchos::null
134 );
135
144 virtual void informUpdatedVerbosityState() const;
145
146private:
147
148 std::string thisLinePrefix_;
149
150//use pragmas to disable some false-positive warnings for windows sharedlibs export
151#ifdef _MSC_VER
152#pragma warning(push)
153#pragma warning(disable:4251)
154#endif
155 mutable RCP<FancyOStream> thisOStream_;
156 mutable RCP<FancyOStream> thisOverridingOStream_;
157#ifdef _MSC_VER
158#pragma warning(pop)
159#endif
160
161 static RCP<FancyOStream>& privateDefaultOStream();
162
163};
164
165
201template<class ObjectType>
202class VerboseObject : virtual public VerboseObjectBase {
203public:
205
206
212
215
217
219
221 explicit
223 const EVerbosityLevel verbLevel = VERB_DEFAULT, // Note, this must be the same as the default value for defaultVerbLevel_
224 const RCP<FancyOStream> &oStream = Teuchos::null
225 );
226
232 virtual const VerboseObject& setVerbLevel(
233 const EVerbosityLevel verbLevel) const;
234
242 const EVerbosityLevel verbLevel) const;
243
245
247
249 virtual EVerbosityLevel getVerbLevel() const;
250
252
253protected:
254
263 const EVerbosityLevel verbLevel = VERB_DEFAULT,
264 const RCP<FancyOStream> &oStream = Teuchos::null
265 );
266
267private:
268
269 mutable EVerbosityLevel thisVerbLevel_;
270 mutable EVerbosityLevel thisOverridingVerbLevel_;
271
272 static EVerbosityLevel& privateDefaultVerbLevel();
273
274};
275
276
280template<class ObjectType>
282public:
288 ):
289 verboseObject_(verboseObject),
290 oldVerbLevel_(VERB_DEFAULT)
291 {
292 if(verboseObject_.get()) {
293 oldOStream_ = verboseObject_->getOStream();
294 oldVerbLevel_ = verboseObject_->getVerbLevel();
295 verboseObject_->setOStream(newOStream);
296 verboseObject_->setVerbLevel(newVerbLevel);
297 }
298 }
301 {
302 if(verboseObject_.get()) {
303 verboseObject_->setOStream(oldOStream_);
304 verboseObject_->setVerbLevel(oldVerbLevel_);
305 }
306 }
307private:
309 RCP<FancyOStream> oldOStream_;
310 EVerbosityLevel oldVerbLevel_;
311 // Not defined and not to be called
315};
316
317
318// //////////////////////////////////
319// Template defintions
320
321
322//
323// VerboseObject
324//
325
326
327// Public static member functions
328
329
330template<class ObjectType>
335
336
337template<class ObjectType>
339{
340 return privateDefaultVerbLevel();
341}
342
343
344// Constructors/Initializers
345
346
347template<class ObjectType>
349 const EVerbosityLevel verbLevel,
351 )
352 : thisOverridingVerbLevel_(VERB_DEFAULT)
353{
354 this->initializeVerboseObject(verbLevel,oStream);
355}
356
357
358template<class ObjectType>
360 const EVerbosityLevel verbLevel,
362 )
363{
364 thisVerbLevel_ = verbLevel;
365 this->initializeVerboseObjectBase(oStream);
366}
367
368
369template<class ObjectType>
372{
373 thisVerbLevel_ = verbLevel;
374 informUpdatedVerbosityState();
375 return *this;
376}
377
378
379template<class ObjectType>
382 const EVerbosityLevel verbLevel
383 ) const
384{
385 thisOverridingVerbLevel_ = verbLevel;
386 informUpdatedVerbosityState();
387 return *this;
388}
389
390
391// Query functions
392
393
394template<class ObjectType>
396{
397 if (VERB_DEFAULT != thisOverridingVerbLevel_)
398 return thisOverridingVerbLevel_;
399 if (VERB_DEFAULT == thisVerbLevel_)
400 return getDefaultVerbLevel();
401 return thisVerbLevel_;
402}
403
404
405// Private static members
406
407
408template<class ObjectType>
410{
412 return defaultVerbLevel;
413}
414
415
416} // namespace Teuchos
417
418
419#endif // TEUCHOS_VERBOSE_OBJECT_HPP
Reference-counted pointer class and non-member templated function implementations.
Smart reference counting pointer class for automatic garbage collection.
T * get() const
Get the raw C++ pointer to the underlying object.
Non-templated base class for objects that can print their activities to a stream.
Set and release a stream and verbosity level.
VerboseObjectTempState(const RCP< const VerboseObject< ObjectType > > &verboseObject, const RCP< FancyOStream > &newOStream, const EVerbosityLevel newVerbLevel)
Templated base class for objects that can print their activities to a stream and have a verbosity lev...
static void setDefaultVerbLevel(const EVerbosityLevel defaultVerbLevel)
Set the default verbosity level.
virtual const VerboseObject & setVerbLevel(const EVerbosityLevel verbLevel) const
Set this object's verbosity level.
virtual EVerbosityLevel getVerbLevel() const
Get the verbosity level.
VerboseObject(const EVerbosityLevel verbLevel=VERB_DEFAULT, const RCP< FancyOStream > &oStream=Teuchos::null)
Constructor: calls initializeVerboseObject().
void initializeVerboseObject(const EVerbosityLevel verbLevel=VERB_DEFAULT, const RCP< FancyOStream > &oStream=Teuchos::null)
Initialize the VerboseObject.
static EVerbosityLevel getDefaultVerbLevel()
Get the default verbosity level.
virtual const VerboseObject & setOverridingVerbLevel(const EVerbosityLevel verbLevel) const
Set the overriding verbosity level for *this object.
Tabbing class for helping to create formated, indented output for a basic_FancyOStream object.
EVerbosityLevel
Verbosity level.
@ VERB_DEFAULT
Generate output as defined by the object.
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos,...