00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00013
00014 #include <string>
00015
00016 #include "Persistency/PerStreamManager.h"
00017 #include "Persistency/PerStream.h"
00018 #include "MessageService/MsgService.h"
00019
00020 std::ostream& operator<<(std::ostream& ms, const PerStreamManager& psm) {
00021 return psm.Print(ms);
00022 }
00023
00024 ClassImp(PerStreamManager)
00025
00026
00027
00028
00029 CVSID("$Id: PerStreamManager.cxx,v 1.18 2007/03/20 22:52:09 schubert Exp $");
00030
00031
00032
00033
00034 void PerStreamManager::CloseFile(string streamname) {
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 if (streamname == "*") {
00050
00051 for (StreamMapConstItr citr = fStreamMap.begin();
00052 citr != fStreamMap.end(); ++citr)
00053 citr -> second -> CloseFile();
00054 }
00055 else {
00056
00057 PerStream* stream = GetOpenedStream(streamname);
00058 if (stream) stream -> CloseFile();
00059 }
00060
00061 }
00062
00063 void PerStreamManager::CloseStream(string streamname) {
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075 if ( streamname == "*" ) {
00076
00077 for (StreamMapItr itr=fStreamMap.begin();itr != fStreamMap.end(); ++itr)
00078 delete (itr -> second);
00079 fStreamMap.clear();
00080 }
00081 else {
00082
00083 StreamMapItr itr = fStreamMap.find(streamname);
00084 if (itr != fStreamMap.end()) {
00085 delete (itr -> second);
00086 fStreamMap.erase(itr);
00087 }
00088 }
00089
00090 }
00091
00092 std::string PerStreamManager::GetCurrentFile(std::string streamname) const {
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103 if ( streamname == "*" ) {
00104 for (StreamMapConstItr itr=fStreamMap.begin();itr!=fStreamMap.end();++itr){
00105 PerStream* stream = itr->second;
00106 if ( stream -> IsOpen() ) return stream->GetFullFilePathName();
00107 }
00108 }
00109 else {
00110 PerStream* stream = this -> GetOpenedStream(streamname);
00111 if ( stream ) return stream->GetFullFilePathName();
00112 }
00113
00114 return "";
00115
00116 }
00117
00118 PerStream* PerStreamManager::GetOpenedStream(std::string streamname) const {
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134 StreamMapConstItr citr = fStreamMap.find(streamname);
00135 return (citr != fStreamMap.end()) ? citr -> second : (PerStream*)0;
00136
00137 }
00138
00139 UInt_t PerStreamManager::GetNumStreamOpen() const {
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151 UInt_t nopen = 0;
00152
00153 for(StreamMapConstItr citr=fStreamMap.begin();citr!=fStreamMap.end();++citr){
00154 if ( citr->second->IsOpen() ) nopen++;
00155 }
00156
00157 return nopen;
00158
00159 }
00160
00161 PerStreamManager::PerStreamManager() : fPrintOpt("") {
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171 }
00172
00173 PerStreamManager::~PerStreamManager() {
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184 CloseStream();
00185
00186 }
00187
00188 ostream& PerStreamManager::Print(ostream& ms,
00189 Option_t* ) const {
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201 ms << "StreamManager is currently managing " << GetNumStream()
00202 << " stream(s):" << endl;
00203
00204 Int_t nstream=0;
00205 for( StreamMapConstItr citr = fStreamMap.begin();
00206 citr != fStreamMap.end(); ++citr ) {
00207 ms << ++nstream << ")" << "Streamname " << citr -> first << endl;
00208 ms << *(citr -> second);
00209 }
00210
00211 return ms;
00212
00213 }
00214
00215 void PerStreamManager::SetEnable(string streamname, bool enable) {
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233 if (streamname == "*") {
00234
00235 for (StreamMapConstItr citr = fStreamMap.begin();
00236 citr != fStreamMap.end(); ++citr)
00237 citr -> second -> SetEnable(enable);
00238 }
00239 else {
00240
00241 PerStream* stream = GetOpenedStream(streamname);
00242 if (stream) stream -> SetEnable(enable);
00243 }
00244
00245 }
00246
00247
00248 bool PerStreamManager::SetFile(string streamname,string fullfilepathname,
00249 Per::EAccessMode accessmode) {
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269 bool openok = false;
00270
00271 if (streamname == "*") {
00272
00273 for (StreamMapConstItr citr=fStreamMap.begin();
00274 citr!=fStreamMap.end();++citr) {
00275 if ( citr -> second -> IsEnabled() &&
00276 !(citr -> second -> SetFile(fullfilepathname,accessmode)) ) {
00277 MSG("Per",Msg::kWarning) << "Failed to set new file for stream "
00278 << citr->first << endl;
00279 }
00280 else {
00281 openok=true;
00282 }
00283 }
00284 }
00285 else {
00286
00287 PerStream* stream = GetOpenedStream(streamname);
00288 if (stream) {
00289 if (!stream -> SetFile(fullfilepathname,accessmode)) {
00290 MSG("Per",Msg::kWarning) << "Failed to set new file for stream "
00291 << streamname << endl;
00292 }
00293 else {
00294 openok=true;
00295 }
00296 }
00297 }
00298
00299 return openok;
00300
00301 }
00302
00303 void PerStreamManager::SetTestMode(string streamname, bool testmode) {
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320 if (streamname == "*") {
00321
00322 for (StreamMapConstItr citr = fStreamMap.begin();
00323 citr != fStreamMap.end(); ++citr)
00324 citr -> second -> SetTestMode(testmode);
00325 }
00326 else {
00327
00328 PerStream* stream = GetOpenedStream(streamname);
00329 if (stream) stream -> SetTestMode(testmode);
00330 }
00331
00332 }
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353