35 ClassImp(TMessageHandler);
41 TMessageHandler::TMessageHandler(
const TClass *cl, Bool_t derived)
52 SetName(fClass->GetName());
54 SetName(
"DefaultMessageHandler");
63 TMessageHandler::TMessageHandler(
const char *cl, Bool_t derived)
65 fClass = TClass::GetClass(cl);
75 SetName(fClass->GetName());
82 TMessageHandler:: ~TMessageHandler()
85 if (fSize <= 0)
return;
93 void TMessageHandler::Add()
95 R__LOCKGUARD(gROOTMutex);
96 gROOT->GetListOfMessageHandlers()->Add(
this);
108 Int_t TMessageHandler::GetMessageCount(Int_t messId)
const
110 if (fSize <= 0)
return 0;
111 for (Int_t i = 0; i < fSize; i++) {
112 if (fMessIds[i] == messId)
return fCnts[i];
120 Int_t TMessageHandler::GetTotalMessageCount()
const
122 if (fSize <= 0)
return 0;
124 for (Int_t i = 0; i < fSize; i++) {
133 void TMessageHandler::HandleMessage(Int_t
id,
const TObject *obj)
138 if(!obj->InheritsFrom(fClass))
return;
140 if (obj->IsA() != fClass)
return;
154 fCnts =
new Int_t[fSize];
155 fMessIds =
new Int_t[fSize];
158 for (i = 0; i < fSize; i++) {
159 if (fMessIds[i] == fMessId) {
166 Int_t *newCnts =
new Int_t[fSize];
167 Int_t *newMessIds =
new Int_t[fSize];
168 for (i = 0; i < fSize-1; i++) {
169 newCnts[i] = fCnts[i];
170 newMessIds[i] = fMessIds[i];
175 fMessIds = newMessIds;
178 fMessIds[fSize-1] = fMessId;
184 Bool_t TMessageHandler::Notify()
186 if (fClass)
return kFALSE;
189 if (!fMessObj)
return kFALSE;
190 Int_t uid = Int_t(fMessObj->IsA()->GetUniqueID());
191 fMessId += 10000*uid;
200 void TMessageHandler::Print(Option_t *)
const
202 printf(
"\n ****** Message Handler: %s has a total of %d messages\n",GetName(),GetTotalMessageCount());
203 if (fSize <= 0)
return;
206 TIter next(gROOT->GetListOfClasses());
207 for (Int_t i = 0; i < fSize; i++) {
215 while ((cl = (TClass*)next())) {
216 if (cl->GetUniqueID() == UInt_t(uid))
break;
219 if (!cl) cl = gROOT->IsA();
221 printf(
" Class: %-20s WARNINGs has %d counts\n",cl->GetName(),fCnts[i]);
225 printf(
" Class: %-20s ERRORs has %d counts\n",cl->GetName(),fCnts[i]);
228 printf(
" Class: %-20s MessID = %5d has %d counts\n",cl->GetName(),id,fCnts[i]);
235 void TMessageHandler::Remove()
237 R__LOCKGUARD(gROOTMutex);
238 gROOT->GetListOfMessageHandlers()->Remove(
this);