Teuchos_VerboseObjectParameterListHelpers.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #include "Teuchos_VerboseObjectParameterListHelpers.hpp"
00030 #include "Teuchos_StandardParameterEntryValidators.hpp"
00031
00032
00033 namespace {
00034
00035
00036 const std::string VerboseObject_name = "VerboseObject";
00037
00038 const std::string OutputFile_name = "Output File";
00039 const std::string OutputFile_default = "none";
00040
00041 const std::string VerbosityLevel_name = "Verbosity Level";
00042 const std::string VerbosityLevel_default = "default";
00043 Teuchos::RCP<
00044 Teuchos::StringToIntegralParameterEntryValidator<Teuchos::EVerbosityLevel>
00045 >
00046 VerbosityLevel_validator;
00047
00048
00049 }
00050
00051
00052
00053 Teuchos::RCP<const Teuchos::ParameterList>
00054 Teuchos::getValidVerboseObjectSublist()
00055 {
00056 static RCP<const ParameterList> validParams;
00057 if (is_null(validParams)) {
00058 RCP<ParameterList>
00059 pl = rcp(new ParameterList(VerboseObject_name));
00060 pl->set(
00061 VerbosityLevel_name, VerbosityLevel_default,
00062 "The verbosity level to use to override whatever is set in code.\n"
00063 "The value of \"default\" will allow the level set in code to be used.",
00064 VerbosityLevel_validator = verbosityLevelParameterEntryValidator(
00065 VerbosityLevel_name
00066 )
00067 );
00068 pl->set(
00069 OutputFile_name, OutputFile_default,
00070 "The file to send output to. If the value \"none\" is used, then\n"
00071 "whatever is set in code will be used. However, any other std::string value\n"
00072 "will be used to create an std::ofstream object to a file with the given name.\n"
00073 "Therefore, any valid file name is a valid std::string value for this parameter."
00074 );
00075 validParams = pl;
00076 }
00077 return validParams;
00078 }
00079
00080
00081 void Teuchos::setupVerboseObjectSublist( ParameterList* paramList )
00082 {
00083 TEST_FOR_EXCEPT(0==paramList);
00084 paramList->sublist(VerboseObject_name).setParameters(
00085 *getValidVerboseObjectSublist()
00086 ).disableRecursiveValidation();
00087 }
00088
00089
00090 void Teuchos::readVerboseObjectSublist(
00091 ParameterList* paramList,
00092 RCP<FancyOStream> *oStream, EVerbosityLevel *verbLevel
00093 )
00094 {
00095
00096 TEST_FOR_EXCEPT(0==paramList);
00097 TEST_FOR_EXCEPT(0==oStream);
00098 TEST_FOR_EXCEPT(0==verbLevel);
00099 ParameterList
00100 &voSublist = paramList->sublist(VerboseObject_name);
00101 voSublist.validateParameters(*getValidVerboseObjectSublist());
00102 const std::string
00103 outputFileStr = voSublist.get(OutputFile_name,OutputFile_default);
00104 *verbLevel = VerbosityLevel_validator->getIntegralValue(
00105 voSublist,VerbosityLevel_name,VerbosityLevel_default
00106 );
00107 if (outputFileStr==OutputFile_default) {
00108 *oStream = null;
00109 }
00110 else {
00111 RCP<std::ofstream>
00112 oFileStream = rcp(new std::ofstream(outputFileStr.c_str()));
00113 TEST_FOR_EXCEPTION_PURE_MSG(
00114 oFileStream->eof(), Exceptions::InvalidParameterValue,
00115 "Error, the file \"" << outputFileStr << "\n given by the parameter\n"
00116 "\'" << OutputFile_name << "\' in the sublist\n"
00117 "\'" << voSublist.name() << "\' count not be opened for output!"
00118 );
00119 *oStream = fancyOStream(rcp_implicit_cast<std::ostream>(oFileStream));
00120 }
00121 #ifdef TEUCHOS_DEBUG
00122 voSublist.validateParameters(*getValidVerboseObjectSublist());
00123 #endif
00124 }