00001 00002 // $Id: JobCResult.cxx,v 1.4 2003/02/12 02:16:40 kasahara Exp $ 00003 // 00004 // A class for encapsulating the result of running a job module on a 00005 // given data record 00006 // 00007 // messier@huhepl.harvard.edu 00009 #include "JobControl/JobCResult.h" 00010 #include <iostream> 00011 00012 std::ostream& operator<<(std::ostream& os, const JobCResult& r) 00013 { 00014 os << "["; 00015 if (r.ErrorLevel()) os << "E=" << r.ErrorLevel() << "/"; 00016 if (r.Passed()) os << "P/"; 00017 if (r.Failed()) os << "F/"; 00018 if (r.BeginFile()) os << "BF/"; 00019 if (r.EndFile()) os << "EF/"; 00020 if (r.BeginRun()) os << "BR/"; 00021 if (r.EndRun()) os << "ER/"; 00022 if (r.BeginOfInputStream()) os << "BOF/"; 00023 if (r.EndOfInputStream()) os << "EOF/"; 00024 os << "]"; 00025 return os; 00026 } 00027 00028 //...................................................................... 00029 00030 JobCResult::JobCResult(JobCResult::Error_t result) : fResult(0) 00031 { 00032 //====================================================================== 00033 // Assign from an error flag 00034 //====================================================================== 00035 switch (result) { 00036 case JobCResult::kAOK: fResult = kAOKFlg; break; 00037 case JobCResult::kWarning: fResult = kWarningFlg; break; 00038 case JobCResult::kError: fResult = kErrorFlg; break; 00039 case JobCResult::kFatal: fResult = kFatalFlg; break; 00040 }; 00041 } 00042 //...................................................................... 00043 00044 JobCResult::JobCResult(JobCResult::Decision_t result) : fResult(0) 00045 { 00046 //====================================================================== 00047 // Assign from an pass/fail decision flag 00048 //====================================================================== 00049 switch (result) { 00050 case JobCResult::kPassed: fResult = kPassFlg; break; 00051 case JobCResult::kFailed: fResult = kFailFlg; break; 00052 }; 00053 } 00054 00055 //...................................................................... 00056 00057 JobCResult::JobCResult(JobCResult::IoFlag_t result) : fResult(0) 00058 { 00059 //====================================================================== 00060 // Assign from an I/O status flag 00061 //====================================================================== 00062 switch (result) { 00063 case JobCResult::kBeginFile: fResult= kBeginFileFlg; break; 00064 case JobCResult::kEndFile: fResult= kEndFileFlg; break; 00065 case JobCResult::kBeginRun: fResult= kBeginRunFlg; break; 00066 case JobCResult::kEndRun: fResult= kEndRunFlg; break; 00067 case JobCResult::kBeginOfInputStream: fResult= kBeginOfInputStreamFlg; break; 00068 case JobCResult::kEndOfInputStream: fResult= kEndOfInputStreamFlg; break; 00069 case JobCResult::kNonPhysicsRecord: fResult= kNonPhysicsRecordFlg; break; 00070 }; 00071 } 00072 00073 //...................................................................... 00074 00075 JobCResult& JobCResult::operator=(Error_t result) 00076 { 00077 //====================================================================== 00078 // Set any error flags. With the exception of AOK these are cumulative 00079 //====================================================================== 00080 switch (result) { 00081 case JobCResult::kAOK: fResult &= (~kErrorMask); break; 00082 case JobCResult::kWarning: this->SetWarning(); break; 00083 case JobCResult::kError: this->SetError(); break; 00084 case JobCResult::kFatal: this->SetFatal(); break; 00085 }; 00086 return *this; 00087 } 00088 00089 //...................................................................... 00090 00091 JobCResult& JobCResult::operator=(Decision_t result) 00092 { 00093 //====================================================================== 00094 // Set the pass/fail result 00095 //====================================================================== 00096 switch (result) { 00097 case JobCResult::kPassed: this->SetPassed(); break; 00098 case JobCResult::kFailed: this->SetFailed(); break; 00099 }; 00100 return *this; 00101 } 00102 00103 //...................................................................... 00104 00105 JobCResult& JobCResult::operator=(IoFlag_t result) 00106 { 00107 //====================================================================== 00108 // Set any I/O flags. These are all cumulative 00109 //====================================================================== 00110 switch (result) { 00111 case kBeginFile: this->SetBeginFile(); break; 00112 case kEndFile: this->SetEndFile(); break; 00113 case kBeginRun: this->SetBeginRun(); break; 00114 case kEndRun: this->SetEndRun(); break; 00115 case kBeginOfInputStream: this->SetBeginOfInputStream(); break; 00116 case kEndOfInputStream: this->SetEndOfInputStream(); break; 00117 case kNonPhysicsRecord: this->SetNonPhysicsRecord(); break; 00118 }; 00119 return *this; 00120 } 00121 00122 //...................................................................... 00123 00124 JobCResult& JobCResult::operator|=(const JobCResult& rhs) 00125 { 00126 //====================================================================== 00127 // Combine some results 00128 //====================================================================== 00129 fResult |= rhs.fResult; 00130 return *this; 00131 } 00132 00133 //...................................................................... 00134 00135 bool JobCResult::HaveError() const 00136 { 00137 //====================================================================== 00138 // Are any error bits set? 00139 //====================================================================== 00140 return (fResult & kErrorMask) != 0; 00141 } 00142 00143 //...................................................................... 00144 00145 bool JobCResult::HaveDecision() const 00146 { 00147 //====================================================================== 00148 // Are any pass/fail decision bits set? 00149 //====================================================================== 00150 return (fResult & kDecisionMask) != 0; 00151 } 00152 00153 //...................................................................... 00154 00155 bool JobCResult::HaveIoFlag() const 00156 { 00157 //====================================================================== 00158 // Are any I/O flags set? 00159 //====================================================================== 00160 return (fResult & kIoMask) != 0; 00161 } 00162 00163 //...................................................................... 00164 00165 JobCResult::Error_t JobCResult::ErrorLevel() const 00166 { 00167 //====================================================================== 00168 // What's the severity of the error condition? 00169 //====================================================================== 00170 Error_t e = kAOK; 00171 if (fResult & kWarningFlg) e = JobCResult::kWarning; 00172 if (fResult & kErrorFlg) e = JobCResult::kError; 00173 if (fResult & kFatalFlg) e = JobCResult::kFatal; 00174 return e; 00175 } 00176 00177 //...................................................................... 00178 00179 //====================================================================== 00180 // Return pass/fail decision 00181 //====================================================================== 00182 bool JobCResult::Passed() const { return fResult&JobCResult::kPassFlg; } 00183 bool JobCResult::Failed() const { return fResult&JobCResult::kFailFlg; } 00184 00185 //...................................................................... 00186 00187 bool JobCResult::BeginFile() const 00188 { 00189 //====================================================================== 00190 // Have we started a new file? 00191 //====================================================================== 00192 return (fResult & kBeginFileFlg)!=0; 00193 } 00194 00195 //...................................................................... 00196 00197 bool JobCResult::EndFile() const 00198 { 00199 //====================================================================== 00200 // Have we finished with a file? 00201 //====================================================================== 00202 return (fResult & kEndFileFlg)!=0; 00203 } 00204 00205 //...................................................................... 00206 00207 bool JobCResult::BeginRun() const 00208 { 00209 //====================================================================== 00210 // Have we started a new run? 00211 //====================================================================== 00212 return (fResult & kBeginRunFlg)!=0; 00213 } 00214 00215 //...................................................................... 00216 00217 bool JobCResult::EndRun() const 00218 { 00219 //====================================================================== 00220 // Have we ended a run? 00221 //====================================================================== 00222 return (fResult & kEndRunFlg)!=0; 00223 } 00224 00225 //...................................................................... 00226 00227 bool JobCResult::BeginOfInputStream() const 00228 { 00229 //====================================================================== 00230 // Beginning of input streams? 00231 //====================================================================== 00232 return (fResult & kBeginOfInputStreamFlg)!=0; 00233 } 00234 00235 //...................................................................... 00236 00237 bool JobCResult::EndOfInputStream() const 00238 { 00239 //====================================================================== 00240 // Has the input stream run dry? 00241 //====================================================================== 00242 return (fResult & kEndOfInputStreamFlg)!=0; 00243 } 00244 00245 //...................................................................... 00246 00247 bool JobCResult::NonPhysicsRecord() const 00248 { 00249 //====================================================================== 00250 // Has the input stream delivered something besides physics events? 00251 //====================================================================== 00252 return (fResult & kNonPhysicsRecordFlg)!=0; 00253 } 00254 00255 //...................................................................... 00256 00257 //====================================================================== 00258 // Setters for the error condition flags 00259 //====================================================================== 00260 JobCResult& JobCResult::SetAOK() { 00261 fResult &= (~kErrorMask); // Lower all error flags 00262 return *this; 00263 } 00264 JobCResult& JobCResult::SetWarning() { 00265 fResult |= kWarningFlg; 00266 return *this; 00267 } 00268 JobCResult& JobCResult::SetError() { 00269 fResult |= kErrorFlg; 00270 return *this; 00271 } 00272 JobCResult& JobCResult::SetFatal() { 00273 fResult |= kFatalFlg; 00274 return *this; 00275 } 00276 00277 //...................................................................... 00278 00279 //====================================================================== 00280 // Setters for the pass/fail decision flags 00281 //====================================================================== 00282 JobCResult& JobCResult::SetFailed() { 00283 this->ClearPassFail(); 00284 fResult |= kFailFlg; 00285 return *this; 00286 } 00287 JobCResult& JobCResult::SetPassed() { 00288 this->ClearPassFail(); 00289 fResult |= kPassFlg; 00290 return *this; 00291 } 00292 JobCResult& JobCResult::ClearPassFail() { 00293 fResult &= (~kDecisionMask); 00294 return *this; 00295 } 00296 00297 //...................................................................... 00298 00299 //====================================================================== 00300 // Setters for the I/O flags 00301 //====================================================================== 00302 JobCResult& JobCResult::SetBeginFile() { 00303 fResult |= kBeginFileFlg; 00304 return *this; 00305 } 00306 JobCResult& JobCResult::SetEndFile() { 00307 fResult |= kEndFileFlg; 00308 return *this; 00309 } 00310 JobCResult& JobCResult::SetBeginRun() { 00311 fResult |= kBeginRunFlg; 00312 return *this; 00313 } 00314 JobCResult& JobCResult::SetEndRun(){ 00315 fResult |= kEndRunFlg; 00316 return *this; 00317 } 00318 JobCResult& JobCResult::SetBeginOfInputStream() { 00319 fResult |= kBeginOfInputStreamFlg; 00320 return *this; 00321 } 00322 JobCResult& JobCResult::SetEndOfInputStream() { 00323 fResult |= kEndOfInputStreamFlg; 00324 return *this; 00325 } 00326 JobCResult& JobCResult::SetNonPhysicsRecord() { 00327 fResult |= kNonPhysicsRecordFlg; 00328 return *this; 00329 } 00330
1.3.9.1