00001
00002 #include "FWCore/ParameterSet/interface/ParameterDescription.h"
00003
00004 #include "DataFormats/Provenance/interface/EventID.h"
00005 #include "DataFormats/Provenance/interface/EventRange.h"
00006 #include "DataFormats/Provenance/interface/LuminosityBlockID.h"
00007 #include "DataFormats/Provenance/interface/LuminosityBlockRange.h"
00008 #include "FWCore/ParameterSet/interface/DocFormatHelper.h"
00009 #include "FWCore/ParameterSet/interface/FileInPath.h"
00010 #include "FWCore/ParameterSet/interface/FillDescriptionFromPSet.h"
00011 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
00012 #include "FWCore/ParameterSet/interface/VParameterSetEntry.h"
00013 #include "FWCore/Utilities/interface/Algorithms.h"
00014 #include "FWCore/Utilities/interface/EDMException.h"
00015 #include "FWCore/Utilities/interface/InputTag.h"
00016
00017 #include "boost/bind.hpp"
00018
00019 #include <cassert>
00020 #include <cstdlib>
00021 #include <iomanip>
00022 #include <ostream>
00023 #include <sstream>
00024
00025 namespace edm {
00026
00027
00028
00029 ParameterDescription<ParameterSetDescription>::
00030 ParameterDescription(std::string const& iLabel,
00031 ParameterSetDescription const& value,
00032 bool isTracked) :
00033 ParameterDescriptionBase(iLabel, k_PSet, isTracked, true),
00034 psetDesc_(new ParameterSetDescription(value)) {
00035 }
00036
00037 ParameterDescription<ParameterSetDescription>::
00038 ParameterDescription(char const* iLabel,
00039 ParameterSetDescription const& value,
00040 bool isTracked) :
00041 ParameterDescriptionBase(iLabel, k_PSet, isTracked, true),
00042 psetDesc_(new ParameterSetDescription(value)) {
00043 }
00044
00045 ParameterDescription<ParameterSetDescription>::
00046 ~ParameterDescription() { }
00047
00048 void
00049 ParameterDescription<ParameterSetDescription>::
00050 validate_(ParameterSet& pset,
00051 std::set<std::string>& validatedLabels,
00052 bool optional) const {
00053
00054 bool exists = pset.existsAs<ParameterSet>(label(), isTracked());
00055
00056 if(exists) {
00057 validatedLabels.insert(label());
00058 } else if(pset.existsAs<ParameterSet>(label(), !isTracked())) {
00059 throwParameterWrongTrackiness();
00060 } else if(pset.exists(label())) {
00061 throwParameterWrongType();
00062 }
00063
00064 if(!optional && !exists) {
00065 if(isTracked()) {
00066 pset.addParameter(label(), ParameterSet());
00067 } else {
00068 pset.addUntrackedParameter(label(), ParameterSet());
00069 }
00070 validatedLabels.insert(label());
00071 }
00072
00073 exists = pset.existsAs<ParameterSet>(label(), isTracked());
00074
00075 if(exists) {
00076 ParameterSet * containedPSet = pset.getPSetForUpdate(label());
00077 psetDesc_->validate(*containedPSet);
00078 }
00079 }
00080
00081 void
00082 ParameterDescription<ParameterSetDescription>::
00083 printDefault_(std::ostream& os,
00084 bool writeToCfi,
00085 DocFormatHelper& dfh) {
00086 os << "see Section " << dfh.section()
00087 << "." << dfh.counter();
00088 if(!writeToCfi) os << " (do not write to cfi)";
00089 os << "\n";
00090 }
00091
00092 bool
00093 ParameterDescription<ParameterSetDescription>::
00094 hasNestedContent_() {
00095 return true;
00096 }
00097
00098 void
00099 ParameterDescription<ParameterSetDescription>::
00100 printNestedContent_(std::ostream& os,
00101 bool ,
00102 DocFormatHelper& dfh) {
00103 int indentation = dfh.indentation();
00104 if(dfh.parent() != DocFormatHelper::TOP) {
00105 indentation -= DocFormatHelper::offsetSectionContent();
00106 }
00107
00108 std::stringstream ss;
00109 ss << dfh.section() << "." << dfh.counter();
00110 std::string newSection = ss.str();
00111
00112 printSpaces(os, indentation);
00113 os << "Section " << newSection
00114 << " " << label() << " PSet description:\n";
00115 if(!dfh.brief()) os << "\n";
00116
00117 DocFormatHelper new_dfh(dfh);
00118 new_dfh.init();
00119 new_dfh.setSection(newSection);
00120 if(dfh.parent() == DocFormatHelper::TOP) {
00121 new_dfh.setIndentation(indentation + DocFormatHelper::offsetSectionContent());
00122 }
00123 psetDesc_->print(os, new_dfh);
00124 }
00125
00126 bool
00127 ParameterDescription<ParameterSetDescription>::
00128 exists_(ParameterSet const& pset) const {
00129 return pset.existsAs<ParameterSet>(label(), isTracked());
00130 }
00131
00132 ParameterSetDescription const*
00133 ParameterDescription<ParameterSetDescription>::
00134 parameterSetDescription() const {
00135 return psetDesc_.operator->();
00136 }
00137
00138 ParameterSetDescription *
00139 ParameterDescription<ParameterSetDescription>::
00140 parameterSetDescription() {
00141 return psetDesc_.operator->();
00142 }
00143
00144 void
00145 ParameterDescription<ParameterSetDescription>::
00146 writeCfi_(std::ostream& os, int indentation) const {
00147 bool startWithComma = false;
00148 indentation += 2;
00149 psetDesc_->writeCfi(os, startWithComma, indentation);
00150 }
00151
00152 void
00153 ParameterDescription<ParameterSetDescription>::
00154 writeDoc_(std::ostream&, int ) const {
00155 }
00156
00157
00158 bool
00159 ParameterDescription<ParameterSetDescription>::
00160 exists_(ParameterSet const&, bool ) const {
00161 throw Exception(errors::LogicError);
00162 return true;
00163 }
00164
00165 void
00166 ParameterDescription<ParameterSetDescription>::
00167 insertDefault_(ParameterSet&) const {
00168 throw Exception(errors::LogicError);
00169 return;
00170 }
00171
00172
00173
00174 ParameterDescription<std::vector<ParameterSet> >::
00175 ParameterDescription(std::string const& iLabel,
00176 ParameterSetDescription const& psetDesc,
00177 bool isTracked,
00178 std::vector<ParameterSet> const& vPset) :
00179 ParameterDescriptionBase(iLabel, k_VPSet, isTracked, true),
00180 psetDesc_(new ParameterSetDescription(psetDesc)),
00181 vPset_(vPset),
00182 partOfDefaultOfVPSet_(false) {
00183 }
00184
00185 ParameterDescription<std::vector<ParameterSet> >::
00186 ParameterDescription(char const* iLabel,
00187 ParameterSetDescription const& psetDesc,
00188 bool isTracked,
00189 std::vector<ParameterSet> const& vPset) :
00190 ParameterDescriptionBase(iLabel, k_VPSet, isTracked, true),
00191 psetDesc_(new ParameterSetDescription(psetDesc)),
00192 vPset_(vPset),
00193 partOfDefaultOfVPSet_(false) {
00194 }
00195
00196 ParameterDescription<std::vector<ParameterSet> >::
00197 ParameterDescription(std::string const& iLabel,
00198 ParameterSetDescription const& psetDesc,
00199 bool isTracked) :
00200 ParameterDescriptionBase(iLabel, k_VPSet, isTracked, false),
00201 psetDesc_(new ParameterSetDescription(psetDesc)),
00202 vPset_(),
00203 partOfDefaultOfVPSet_(false) {
00204 }
00205
00206 ParameterDescription<std::vector<ParameterSet> >::
00207 ParameterDescription(char const* iLabel,
00208 ParameterSetDescription const& psetDesc,
00209 bool isTracked) :
00210 ParameterDescriptionBase(iLabel, k_VPSet, isTracked, false),
00211 psetDesc_(new ParameterSetDescription(psetDesc)),
00212 vPset_(),
00213 partOfDefaultOfVPSet_(false) {
00214 }
00215
00216 ParameterDescription<std::vector<ParameterSet> >::
00217 ~ParameterDescription() { }
00218
00219 ParameterSetDescription const*
00220 ParameterDescription<std::vector<ParameterSet> >::
00221 parameterSetDescription() const {
00222 return psetDesc_.operator->();
00223 }
00224
00225 ParameterSetDescription *
00226 ParameterDescription<std::vector<ParameterSet> >::
00227 parameterSetDescription() {
00228 return psetDesc_.operator->();
00229 }
00230
00231 void
00232 ParameterDescription<std::vector<ParameterSet> >::
00233 validate_(ParameterSet& pset,
00234 std::set<std::string>& validatedLabels,
00235 bool optional) const {
00236
00237 bool exists = pset.existsAs<std::vector<ParameterSet> >(label(), isTracked());
00238
00239 if(exists) {
00240 validatedLabels.insert(label());
00241 } else if(pset.existsAs<std::vector<ParameterSet> >(label(), !isTracked())) {
00242 throwParameterWrongTrackiness();
00243 } else if(pset.exists(label())) {
00244 throwParameterWrongType();
00245 }
00246
00247 if(!exists && !optional) {
00248 if(hasDefault()) {
00249 if(isTracked()) {
00250 pset.addParameter(label(), vPset_);
00251 } else {
00252 pset.addUntrackedParameter(label(), vPset_);
00253 }
00254 validatedLabels.insert(label());
00255 } else {
00256 throwMissingRequiredNoDefault();
00257 }
00258 }
00259
00260 exists = pset.existsAs<std::vector<ParameterSet> >(label(), isTracked());
00261 if(exists) {
00262 VParameterSetEntry * vpsetEntry = pset.getPSetVectorForUpdate(label());
00263 assert(vpsetEntry);
00264
00265 for(unsigned i = 0; i < vpsetEntry->size(); ++i) {
00266 psetDesc_->validate(vpsetEntry->psetInVector(i));
00267 }
00268 }
00269 }
00270
00271 void
00272 ParameterDescription<std::vector<ParameterSet> >::
00273 printDefault_(std::ostream& os,
00274 bool writeToCfi,
00275 DocFormatHelper& dfh) {
00276 os << "see Section " << dfh.section()
00277 << "." << dfh.counter();
00278 if(!writeToCfi) os << " (do not write to cfi)";
00279 os << "\n";
00280 }
00281
00282
00283 bool
00284 ParameterDescription<std::vector<ParameterSet> >::
00285 hasNestedContent_() {
00286 return true;
00287 }
00288
00289 void
00290 ParameterDescription<std::vector<ParameterSet> >::
00291 printNestedContent_(std::ostream& os,
00292 bool ,
00293 DocFormatHelper& dfh) {
00294
00295 int indentation = dfh.indentation();
00296 if(dfh.parent() != DocFormatHelper::TOP) {
00297 indentation -= DocFormatHelper::offsetSectionContent();
00298 }
00299
00300 if(!partOfDefaultOfVPSet_) {
00301 printSpaces(os, indentation);
00302 os << "Section " << dfh.section() << "." << dfh.counter()
00303 << " " << label() << " VPSet description:\n";
00304
00305 printSpaces(os, indentation + DocFormatHelper::offsetSectionContent());
00306 os << "All elements will be validated using the PSet description in Section "
00307 << dfh.section() << "." << dfh.counter() << ".1.\n";
00308 } else {
00309 printSpaces(os, indentation);
00310 os << "Section " << dfh.section() << "." << dfh.counter()
00311 << " " << " VPSet description for VPSet that is part of the default of a containing VPSet:\n";
00312 }
00313
00314 printSpaces(os, indentation + DocFormatHelper::offsetSectionContent());
00315
00316 unsigned subsectionOffset = 2;
00317 if(partOfDefaultOfVPSet_) subsectionOffset = 1;
00318
00319 if(hasDefault()) {
00320 if(vPset_.size() == 0U) os << "The default VPSet is empty.\n";
00321 else if(vPset_.size() == 1U) os << "The default VPSet has 1 element.\n";
00322 else os << "The default VPSet has " << vPset_.size() << " elements.\n";
00323
00324 if(vPset_.size() > 0U) {
00325 for(unsigned i = 0; i < vPset_.size(); ++i) {
00326 printSpaces(os, indentation + DocFormatHelper::offsetSectionContent());
00327 os << "[" << (i) << "]: see Section " << dfh.section()
00328 << "." << dfh.counter() << "." << (i + subsectionOffset) << "\n";
00329 }
00330 }
00331 } else {
00332 os << "Does not have a default VPSet.\n";
00333 }
00334
00335 if(!dfh.brief()) os << "\n";
00336
00337 if(!partOfDefaultOfVPSet_) {
00338
00339 std::stringstream ss;
00340 ss << dfh.section() << "." << dfh.counter() << ".1";
00341 std::string newSection = ss.str();
00342
00343 printSpaces(os, indentation);
00344 os << "Section " << newSection << " description of PSet used to validate elements of VPSet:\n";
00345 if(!dfh.brief()) os << "\n";
00346
00347 DocFormatHelper new_dfh(dfh);
00348 new_dfh.init();
00349 new_dfh.setSection(newSection);
00350 if(dfh.parent() == DocFormatHelper::TOP) {
00351 new_dfh.setIndentation(indentation + DocFormatHelper::offsetSectionContent());
00352 }
00353 psetDesc_->print(os, new_dfh);
00354 }
00355
00356 if(hasDefault()) {
00357 for(unsigned i = 0; i < vPset_.size(); ++i) {
00358
00359 std::stringstream ss;
00360 ss << dfh.section() << "." << dfh.counter() << "." << (i + subsectionOffset);
00361 std::string newSection = ss.str();
00362
00363 printSpaces(os, indentation);
00364 os << "Section " << newSection << " PSet description of "
00365 << "default VPSet element [" << i << "]\n";
00366 if(!dfh.brief()) os << "\n";
00367
00368 DocFormatHelper new_dfh(dfh);
00369 new_dfh.init();
00370 new_dfh.setSection(newSection);
00371 if(dfh.parent() == DocFormatHelper::TOP) {
00372 new_dfh.setIndentation(indentation + DocFormatHelper::offsetSectionContent());
00373 }
00374
00375 ParameterSetDescription defaultDescription;
00376 fillDescriptionFromPSet(vPset_[i], defaultDescription);
00377 defaultDescription.print(os, new_dfh);
00378 }
00379 }
00380 }
00381
00382 bool
00383 ParameterDescription<std::vector<ParameterSet> >::
00384 exists_(ParameterSet const& pset) const {
00385 return pset.existsAs<std::vector<ParameterSet> >(label(), isTracked());
00386 }
00387
00388 void
00389 ParameterDescription<std::vector<ParameterSet> >::
00390 writeOneElementToCfi(ParameterSet const& pset,
00391 std::ostream& os,
00392 int indentation,
00393 bool& nextOneStartsWithAComma) {
00394 if(nextOneStartsWithAComma) os << ",";
00395 nextOneStartsWithAComma = true;
00396 os << "\n";
00397 printSpaces(os, indentation + 2);
00398
00399 os << "cms.PSet(";
00400
00401 bool startWithComma = false;
00402 int indent = indentation + 4;
00403
00404 ParameterSetDescription psetDesc;
00405 fillDescriptionFromPSet(pset, psetDesc);
00406 psetDesc.writeCfi(os, startWithComma, indent);
00407
00408 os << ")";
00409 }
00410
00411 void
00412 ParameterDescription<std::vector<ParameterSet> >::
00413 writeCfi_(std::ostream& os, int indentation) const {
00414 bool nextOneStartsWithAComma = false;
00415 for_all(vPset_, boost::bind(&writeOneElementToCfi,
00416 _1,
00417 boost::ref(os),
00418 indentation,
00419 boost::ref(nextOneStartsWithAComma)));
00420 os << "\n";
00421 printSpaces(os, indentation);
00422 }
00423
00424 void
00425 ParameterDescription<std::vector<ParameterSet> >::
00426 writeDoc_(std::ostream&, int ) const {
00427 }
00428
00429
00430 bool
00431 ParameterDescription<std::vector<ParameterSet> >::
00432 exists_(ParameterSet const&, bool ) const {
00433 throw Exception(errors::LogicError);
00434 return true;
00435 }
00436
00437 void
00438 ParameterDescription<std::vector<ParameterSet> >::
00439 insertDefault_(ParameterSet&) const {
00440 throw Exception(errors::LogicError);
00441 return;
00442 }
00443
00444
00445
00446 namespace writeParameterValue {
00447
00448 template<typename T>
00449 void writeSingleValue(std::ostream& os, T const& value, ValueFormat) {
00450 os << value;
00451 }
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468
00469
00470
00471
00472 void formatDouble(double value, std::string& result) {
00473 std::stringstream s;
00474 s << std::setprecision(17) << value;
00475 result = s.str();
00476
00477 if(result.size() > 15 && std::string::npos != result.find(".")) {
00478 std::stringstream s;
00479 s << std::setprecision(15) << value;
00480 std::string resultLessPrecision = s.str();
00481
00482 if(resultLessPrecision.size() < result.size() - 2) {
00483 double test = std::strtod(resultLessPrecision.c_str(), 0);
00484 if(test == value) {
00485 result = resultLessPrecision;
00486 }
00487 }
00488 }
00489 }
00490
00491 template<>
00492 void writeSingleValue<double>(std::ostream& os, double const& value, ValueFormat) {
00493 std::string sValue;
00494 formatDouble(value, sValue);
00495 os << sValue;
00496 }
00497
00498 template<>
00499 void writeSingleValue<bool>(std::ostream& os, bool const& value, ValueFormat) {
00500 value ? os << "True" : os << "False";
00501 }
00502
00503 template<>
00504 void writeSingleValue<std::string>(std::ostream& os, std::string const& value, ValueFormat) {
00505 os << "'" << value << "'";
00506 }
00507
00508 template<>
00509 void writeSingleValue<EventID>(std::ostream& os, EventID const& value, ValueFormat format) {
00510 if(format == CFI) {
00511 os << value.run() << ", " << value.luminosityBlock() << ", " << value.event();
00512 } else {
00513 if(value.luminosityBlock() == 0U) {
00514 os << value.run() << ":" << value.event();
00515 } else {
00516 os << value.run() << ":" << value.luminosityBlock() << ":" << value.event();
00517 }
00518 }
00519 }
00520
00521 template<>
00522 void writeSingleValue<LuminosityBlockID>(std::ostream& os, LuminosityBlockID const& value, ValueFormat format) {
00523 if(format == CFI) os << value.run() << ", " << value.luminosityBlock();
00524 else os << value.run() << ":" << value.luminosityBlock();
00525 }
00526
00527 template<>
00528 void writeSingleValue<EventRange>(std::ostream& os, EventRange const& value, ValueFormat format) {
00529 if(value.startLumi() == 0U) {
00530 if(format == CFI) os << "'" << value.startRun() << ":" << value.startEvent() << "-"
00531 << value.endRun() << ":" << value.endEvent() << "'";
00532 else os << value.startRun() << ":" << value.startEvent() << "-"
00533 << value.endRun() << ":" << value.endEvent();
00534 } else {
00535 if(format == CFI) os << "'" << value.startRun() << ":" << value.startLumi() << ":" << value.startEvent() << "-"
00536 << value.endRun() << ":" << value.endLumi() << ":" << value.endEvent() << "'";
00537 else os << value.startRun() << ":" << value.startLumi() << ":" << value.startEvent() << "-"
00538 << value.endRun() << ":" << value.endLumi() << ":" << value.endEvent();
00539 }
00540 }
00541
00542 template<>
00543 void writeSingleValue<LuminosityBlockRange>(std::ostream& os, LuminosityBlockRange const& value, ValueFormat format) {
00544 if(format == CFI) os << "'" << value.startRun() << ":" << value.startLumi() << "-"
00545 << value.endRun() << ":" << value.endLumi() << "'";
00546 else os << value.startRun() << ":" << value.startLumi() << "-"
00547 << value.endRun() << ":" << value.endLumi();
00548 }
00549
00550 template<>
00551 void writeSingleValue<InputTag>(std::ostream& os, InputTag const& value, ValueFormat format) {
00552 if(format == CFI) {
00553 os << "'" << value.label() << "'";
00554 if(!value.instance().empty() || !value.process().empty()) {
00555 os << ", '" << value.instance() << "'";
00556 }
00557 if(!value.process().empty()) {
00558 os << ", '" << value.process() << "'";
00559 }
00560 } else {
00561 os << "'" << value.label();
00562 if(!value.instance().empty() || !value.process().empty()) {
00563 os << ":" << value.instance();
00564 }
00565 if(!value.process().empty()) {
00566 os << ":" << value.process();
00567 }
00568 os << "'";
00569 }
00570 }
00571
00572 template<>
00573 void writeSingleValue<FileInPath>(std::ostream& os, FileInPath const& value, ValueFormat) {
00574 os << "'" << value.relativePath() << "'";
00575 }
00576
00577 template<typename T>
00578 void writeValue(std::ostream& os, T const& value_, ValueFormat format) {
00579 std::ios_base::fmtflags ff = os.flags(std::ios_base::dec);
00580 os.width(0);
00581 writeSingleValue<T>(os, value_, format);
00582 os.flags(ff);
00583 }
00584
00585 template<typename T>
00586 void writeValueInVector(std::ostream& os, T const& value, ValueFormat format) {
00587 writeSingleValue<T>(os, value, format);
00588 }
00589
00590
00591
00592 template<>
00593 void writeValueInVector<EventID>(std::ostream& os, EventID const& value, ValueFormat format) {
00594 if(value.luminosityBlock() == 0U) {
00595 if(format == CFI) os << "'" << value.run() << ":" << value.event() << "'";
00596 else os << value.run() << ":" << value.event();
00597 } else {
00598 if(format == CFI) os << "'" << value.run() << ":" << value.luminosityBlock() << ":" << value.event() << "'";
00599 else os << value.run() << ":" << value.luminosityBlock() << ":" << value.event();
00600 }
00601 }
00602
00603 template<>
00604 void writeValueInVector<LuminosityBlockID>(std::ostream& os, LuminosityBlockID const& value, ValueFormat format) {
00605 if(format == CFI) os << "'" << value.run() << ":" << value.luminosityBlock() << "'";
00606 else os << value.run() << ":" << value.luminosityBlock();
00607 }
00608
00609 template<>
00610 void writeValueInVector<InputTag>(std::ostream& os, InputTag const& value, ValueFormat) {
00611 os << "'" << value.label();
00612 if(!value.instance().empty() || !value.process().empty()) {
00613 os << ":" << value.instance();
00614 }
00615 if(!value.process().empty()) {
00616 os << ":" << value.process();
00617 }
00618 os << "'";
00619 }
00620
00621 template<typename T>
00622 void writeValueInVectorWithSpace(T const& value,
00623 std::ostream& os,
00624 int indentation,
00625 bool& startWithComma,
00626 ValueFormat format,
00627 int& i) {
00628 if(startWithComma && format == CFI) os << ",";
00629 startWithComma = true;
00630 os << "\n" << std::setw(indentation) << "";
00631 if(format == DOC) os << "[" << i << "]: ";
00632 writeValueInVector<T>(os, value, format);
00633 ++i;
00634 }
00635
00636 template<typename T>
00637 void writeVector(std::ostream& os, int indentation, std::vector<T> const& value_, ValueFormat format) {
00638 std::ios_base::fmtflags ff = os.flags(std::ios_base::dec);
00639 char oldFill = os.fill();
00640 os.width(0);
00641 if(value_.size() == 0U && format == DOC) {
00642 os << "empty";
00643 } else if(value_.size() == 1U && format == CFI) {
00644 writeValueInVector<T>(os, value_[0], format);
00645 } else if(value_.size() >= 1U) {
00646 if(format == DOC) os << "(vector size = " << value_.size() << ")";
00647 os.fill(' ');
00648 bool startWithComma = false;
00649 int i = 0;
00650 for_all(value_, boost::bind(&writeValueInVectorWithSpace<T>,
00651 _1,
00652 boost::ref(os),
00653 indentation + 2,
00654 boost::ref(startWithComma),
00655 format,
00656 boost::ref(i)));
00657 if(format == CFI) os << "\n" << std::setw(indentation) << "";
00658 }
00659 os.flags(ff);
00660 os.fill(oldFill);
00661 }
00662
00663 void writeValue(std::ostream& os, int, int const& value_, ValueFormat format) {
00664 writeValue<int>(os, value_, format);
00665 }
00666
00667 void writeValue(std::ostream& os, int indentation, std::vector<int> const& value_, ValueFormat format) {
00668 writeVector<int>(os, indentation, value_, format);
00669 }
00670
00671 void writeValue(std::ostream& os, int, unsigned const& value_, ValueFormat format) {
00672 writeValue<unsigned>(os, value_, format);
00673 }
00674
00675 void writeValue(std::ostream& os, int indentation, std::vector<unsigned> const& value_, ValueFormat format) {
00676 writeVector<unsigned>(os, indentation, value_, format);
00677 }
00678
00679 void writeValue(std::ostream& os, int, long long const& value_, ValueFormat format) {
00680 writeValue<long long>(os, value_, format);
00681 }
00682
00683 void writeValue(std::ostream& os, int indentation, std::vector<long long> const& value_, ValueFormat format) {
00684 writeVector<long long>(os, indentation, value_, format);
00685 }
00686
00687 void writeValue(std::ostream& os, int, unsigned long long const& value_, ValueFormat format) {
00688 writeValue<unsigned long long>(os, value_, format);
00689 }
00690
00691 void writeValue(std::ostream& os, int indentation, std::vector<unsigned long long> const& value_, ValueFormat format) {
00692 writeVector<unsigned long long>(os, indentation, value_, format);
00693 }
00694
00695 void writeValue(std::ostream& os, int, double const& value_, ValueFormat format) {
00696 writeValue<double>(os, value_, format);
00697 }
00698
00699 void writeValue(std::ostream& os, int indentation, std::vector<double> const& value_, ValueFormat format) {
00700 writeVector<double>(os, indentation, value_, format);
00701 }
00702
00703 void writeValue(std::ostream& os, int, bool const& value_, ValueFormat format) {
00704 writeValue<bool>(os, value_, format);
00705 }
00706
00707 void writeValue(std::ostream& os, int, std::string const& value_, ValueFormat format) {
00708 writeValue<std::string>(os, value_, format);
00709 }
00710
00711 void writeValue(std::ostream& os, int indentation, std::vector<std::string> const& value_, ValueFormat format) {
00712 writeVector<std::string>(os, indentation, value_, format);
00713 }
00714
00715 void writeValue(std::ostream& os, int, EventID const& value_, ValueFormat format) {
00716 writeValue<EventID>(os, value_, format);
00717 }
00718
00719 void writeValue(std::ostream& os, int indentation, std::vector<EventID> const& value_, ValueFormat format) {
00720 writeVector<EventID>(os, indentation, value_, format);
00721 }
00722
00723 void writeValue(std::ostream& os, int, LuminosityBlockID const& value_, ValueFormat format) {
00724 writeValue<LuminosityBlockID>(os, value_, format);
00725 }
00726
00727 void writeValue(std::ostream& os, int indentation, std::vector<LuminosityBlockID> const& value_, ValueFormat format) {
00728 writeVector<LuminosityBlockID>(os, indentation, value_, format);
00729 }
00730
00731 void writeValue(std::ostream& os, int, LuminosityBlockRange const& value_, ValueFormat format) {
00732 writeValue<LuminosityBlockRange>(os, value_, format);
00733 }
00734
00735 void writeValue(std::ostream& os, int indentation, std::vector<LuminosityBlockRange> const& value_, ValueFormat format) {
00736 writeVector<LuminosityBlockRange>(os, indentation, value_, format);
00737 }
00738
00739 void writeValue(std::ostream& os, int, EventRange const& value_, ValueFormat format) {
00740 writeValue<EventRange>(os, value_, format);
00741 }
00742
00743 void writeValue(std::ostream& os, int indentation, std::vector<EventRange> const& value_, ValueFormat format) {
00744 writeVector<EventRange>(os, indentation, value_, format);
00745 }
00746
00747 void writeValue(std::ostream& os, int, InputTag const& value_, ValueFormat format) {
00748 writeValue<InputTag>(os, value_, format);
00749 }
00750
00751 void writeValue(std::ostream& os, int indentation, std::vector<InputTag> const& value_, ValueFormat format) {
00752 writeVector<InputTag>(os, indentation, value_, format);
00753 }
00754
00755 void writeValue(std::ostream& os, int, FileInPath const& value_, ValueFormat format) {
00756 writeValue<FileInPath>(os, value_, format);
00757 }
00758
00759 bool hasNestedContent(int const&) { return false; }
00760 bool hasNestedContent(std::vector<int> const& value) { return value.size() > 5U; }
00761 bool hasNestedContent(unsigned const&) { return false; }
00762 bool hasNestedContent(std::vector<unsigned> const& value) { return value.size() > 5U; }
00763 bool hasNestedContent(long long const&) { return false; }
00764 bool hasNestedContent(std::vector<long long> const& value) { return value.size() > 5U; }
00765 bool hasNestedContent(unsigned long long const&) { return false; }
00766 bool hasNestedContent(std::vector<unsigned long long> const& value) { return value.size() > 5U; }
00767 bool hasNestedContent(double const&) { return false; }
00768 bool hasNestedContent(std::vector<double> const& value) { return value.size() > 5U; }
00769 bool hasNestedContent(bool const&) { return false; }
00770 bool hasNestedContent(std::string const&) { return false; }
00771 bool hasNestedContent(std::vector<std::string> const& value) { return value.size() > 5U; }
00772 bool hasNestedContent(EventID const&) { return false; }
00773 bool hasNestedContent(std::vector<EventID> const& value) { return value.size() > 5U; }
00774 bool hasNestedContent(LuminosityBlockID const&) { return false; }
00775 bool hasNestedContent(std::vector<LuminosityBlockID> const& value) { return value.size() > 5U; }
00776 bool hasNestedContent(LuminosityBlockRange const&) { return false; }
00777 bool hasNestedContent(std::vector<LuminosityBlockRange> const& value) { return value.size() > 5U; }
00778 bool hasNestedContent(EventRange const&) { return false; }
00779 bool hasNestedContent(std::vector<EventRange> const& value) { return value.size() > 5U; }
00780 bool hasNestedContent(InputTag const&) { return false; }
00781 bool hasNestedContent(std::vector<InputTag> const& value) { return value.size() > 5U; }
00782 bool hasNestedContent(FileInPath const&) { return false; }
00783 }
00784 }