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 }