// @(#)root/cont:$Id$
// Author: Fons Rademakers   11/08/95

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// This class registers all instances of TObject and its derived        //
// classes in a hash table. The Add() and Remove() members are called   //
// from the TObject ctor and dtor, repectively. Using the Print()       //
// member one can see all currently active objects in the system.       //
// Using the resource (in .rootrc): Root.ObjectStat one can toggle this //
// feature on or off.                                                   //
// Using the compile option R__NOSTATS one can de-active this feature   //
// for the entire system (for maximum performance in highly time        //
// critical applications).                                              //
//                                                                      //
// The following output has been produced in a ROOT interactive session
// via the command gObjectTable->Print()
//   class                     cnt    on heap     size    total size    heap size
//   ============================================================================
//   TKey                        4          4       72           288          288
//   TClass                     84         84       80          6720         6720
//   TDataMember               276        276       24          6624         6624
//   TObject                    11         11       12           132          132
//   TMethod                  1974       1974       64        126336       126336
//   TDataType                  34         34       56          1904         1904
//   TList                    2328       2328       36         83808        83808
//   TH1F                        1          1      448           448          448
//   TText                    2688       2688       56        150528       150528
//   TGaxis                      1          0      120           120            0
//   TAxis                       6          3       88           528          264
//   TBox                       57         57       52          2964         2964
//   TLine                     118        118       40          4720         4720
//   TWbox                       1          1       56            56           56
//   TArrow                      1          1       64            64           64
//   TPaveText                  59         59      124          7316         7316
//   TPave                       1          1       92            92           92
//   TFile                       1          1      136           136          136
//   TCanvas                     3          3      444          1332         1332
//   TPad                        1          1      312           312          312
//   TContextMenu                3          3       48           144          144
//   TMethodArg               2166       2166       44         95304        95304
//   TPaveLabel                  1          1      120           120          120
//   THtml                       1          1       32            32           32
//   TROOT                       1          0      208           208            0
//   TApplication                1          1       28            28           28
//   TFileHandler                1          1       20            20           20
//   TColor                    163        163       40          6520         6520
//   TStyle                      1          1      364           364          364
//   TRealData                 117        117       28          3276         3276
//   TBaseClass                 88         88       36          3168         3168
//   THashList                   5          5       40           200          200
//   THashTable                  5          5       36           180          180
//   TGeometry                   1          1       64            64           64
//   TLink                       7          7       60           420          420
//   TPostScript                 1          1      764           764          764
//   TMinuit                     1          1      792           792          792
//   TStopwatch                  1          0       56            56            0
//   TRootGuiFactory             1          1       28            28           28
//   TGX11                       1          1      172           172          172
//   TUnixSystem                 1          1      252           252          252
//   TSignalHandler              1          1       20            20           20
//   TOrdCollection              3          3       40           120          120
//   TEnv                        1          1       24            24           24
//   TCling                      1          1      208           208          208
//   TBenchmark                  1          1       52            52           52
//   TClassTable                 1          1       12            12           12
//   TObjectTable                1          1       12            12           12
//   ----------------------------------------------------------------------------
//   Total:                  10225      10219     5976        506988       506340
//   ============================================================================
//////////////////////////////////////////////////////////////////////////

#include "TObjectTable.h"
#include "TROOT.h"
#include "TClass.h"
#include "TError.h"


TObjectTable *gObjectTable;


ClassImp(TObjectTable)

//______________________________________________________________________________
TObjectTable::TObjectTable(Int_t tableSize)
{
   // Create an object table.

   fSize  = (Int_t)TMath::NextPrime(tableSize);
   fTable = new TObject* [fSize];
   memset(fTable, 0, fSize*sizeof(TObject*));
   fTally = 0;
}

//______________________________________________________________________________
TObjectTable::~TObjectTable()
{
   // Delete TObjectTable.

   delete [] fTable; fTable = 0;
}

//______________________________________________________________________________
void TObjectTable::Print(Option_t *option) const
{
   // Print the object table.
   // If option ="all" prints the list of all objects with the format
   // object number, pointer, class name, object name

   TString opt = option;
   opt.ToLower();
   if (opt.Contains("all")) {
      TObject *obj;
      int i, num = 0;
      Printf("\nList of all objects");
      Printf("object   address            class                    name");
      Printf("================================================================================");
      for (i = 0; i < fSize; i++) {
         if (!fTable[i]) continue;
         num++;
         obj = fTable[i];
         printf("%-8d 0x%-16lx %-24s %s\n", num, (Long_t)obj, obj->ClassName(),
                obj->GetName());
      }
      Printf("================================================================================\n");
   }

   //print the number of instances per class
   InstanceStatistics();
}

//______________________________________________________________________________
void TObjectTable::Add(TObject *op)
{
   // Add an object to the object table.

   if (!op) {
      Error("Add", "op is 0");
      return;
   }
   if (!fTable)
      return;

   Int_t slot = FindElement(op);
   if (fTable[slot] == 0) {
      fTable[slot] = op;
      fTally++;
      if (HighWaterMark())
         Expand(2 * fSize);
   }
}

//______________________________________________________________________________
void TObjectTable::AddObj(TObject *op)
{
   // Add an object to the global object table gObjectTable. If the global
   // table does not exist create it first. This member function may only
   // be used by TObject::TObject. Use Add() to add objects to any other
   // TObjectTable object. This is a static function.

   static Bool_t olock = kFALSE;

   if (!op) {
      ::Error("TObjectTable::AddObj", "op is 0");
      return;
   }
   if (olock)
      return;

   if (!gObjectTable) {
      olock = kTRUE;
      gObjectTable = new TObjectTable(10000);
      olock = kFALSE;
      gObjectTable->Add(gObjectTable);
   }

   gObjectTable->Add(op);
}

//______________________________________________________________________________
void TObjectTable::Delete(Option_t *)
{
   // Delete all objects stored in the TObjectTable.

   for (int i = 0; i < fSize; i++) {
      if (fTable[i]) {
         delete fTable[i];
         fTable[i] = 0;
      }
   }
   fTally = 0;
}

//______________________________________________________________________________
void TObjectTable::Remove(TObject *op)
{
   // Remove an object from the object table.

   if (op == 0) {
      Error("Remove", "remove 0 from TObjectTable");
      return;
   }

   if (!fTable)
      return;

   Int_t i = FindElement(op);
   if (fTable[i] == 0) {
      Warning("Remove", "0x%lx not found at %d", (Long_t)op, i);
      for (int j = 0; j < fSize; j++) {
         if (fTable[j] == op) {
            Error("Remove", "0x%lx found at %d !!!", (Long_t)op, j);
            i = j;
         }
      }
   }

   if (fTable[i]) {
      fTable[i] = 0;
      FixCollisions(i);
      fTally--;
   }
}

//______________________________________________________________________________
void TObjectTable::RemoveQuietly(TObject *op)
{
   // Remove an object from the object table. If op is 0 or not in the table
   // don't complain. Currently only used by the TClonesArray dtor. Should not
   // be used anywhere else, except in places where "special" allocation and
   // de-allocation tricks are performed.

   if (op == 0) return;

   if (!fTable)
      return;

   Int_t i = FindElement(op);
   if (fTable[i] == 0)
      for (int j = 0; j < fSize; j++)
         if (fTable[j] == op)
            i = j;

   fTable[i] = 0;
   FixCollisions(i);
   fTally--;
}

//______________________________________________________________________________
void TObjectTable::Terminate()
{
   // Deletes the object table (this static class function calls the dtor).

   InstanceStatistics();
   delete [] fTable; fTable = 0;
}

//______________________________________________________________________________
Int_t TObjectTable::FindElement(TObject *op)
{
   // Find an object in the object table. Returns the slot where to put
   // the object. To test if the object is actually already in the table
   // use PtrIsValid().

   Int_t    slot, n;
   TObject *slotOp;

   if (!fTable)
      return 0;

   //slot = Int_t(((ULong_t) op >> 2) % fSize);
   slot = Int_t(TString::Hash(&op, sizeof(TObject*)) % fSize);
   for (n = 0; n < fSize; n++) {
      if ((slotOp = fTable[slot]) == 0)
         break;
      if (op == slotOp)
         break;
      if (++slot == fSize)
         slot = 0;
   }
   return slot;
}

//______________________________________________________________________________
void TObjectTable::FixCollisions(Int_t index)
{
   // Rehash the object table in case an object has been removed.

   Int_t oldIndex, nextIndex;
   TObject *nextObject;

   for (oldIndex = index+1; ;oldIndex++) {
      if (oldIndex >= fSize)
         oldIndex = 0;
      nextObject = fTable[oldIndex];
      if (nextObject == 0)
         break;
      nextIndex = FindElement(nextObject);
      if (nextIndex != oldIndex) {
         fTable[nextIndex] = nextObject;
         fTable[oldIndex] = 0;
      }
   }
}

//______________________________________________________________________________
void TObjectTable::Expand(Int_t newSize)
{
   // Expand the object table.

   TObject **oldTable = fTable, *op;
   int oldsize = fSize;
   newSize = (Int_t)TMath::NextPrime(newSize);
   fTable  = new TObject* [newSize];
   memset(fTable, 0, newSize*sizeof(TObject*));
   fSize   = newSize;
   fTally  = 0;
   for (int i = 0; i < oldsize; i++)
      if ((op = oldTable[i]))
         Add(op);
   delete [] oldTable;
}

//______________________________________________________________________________
void TObjectTable::InstanceStatistics() const
{
   // Print the object table.

   int n, h, s, ncum = 0, hcum = 0, scum = 0, tcum = 0, thcum = 0;

   if (fTally == 0 || !fTable)
      return;

   UpdateInstCount();

   Printf("\nObject statistics");
   Printf("class                         cnt    on heap     size    total size    heap size");
   Printf("================================================================================");
   TIter next(gROOT->GetListOfClasses());
   TClass *cl;
   while ((cl = (TClass*) next())) {
      n = cl->GetInstanceCount();
      h = cl->GetHeapInstanceCount();
      s = cl->Size();
      if (n > 0) {
         Printf("%-24s %8d%11d%9d%14d%13d", cl->GetName(), n, h, s, n*s, h*s);
         ncum  += n;
         hcum  += h;
         scum  += s;
         tcum  += n*s;
         thcum += h*s;
      }
   }
   Printf("--------------------------------------------------------------------------------");
   Printf("Total:                   %8d%11d%9d%14d%13d", ncum, hcum, scum, tcum, thcum);
   Printf("================================================================================\n");
}

//______________________________________________________________________________
void TObjectTable::UpdateInstCount() const
{
   // Histogram all objects according to their classes.

   TObject *op;

   if (!fTable || !TROOT::Initialized())
      return;

   gROOT->GetListOfClasses()->R__FOR_EACH(TClass,ResetInstanceCount)();

   for (int i = 0; i < fSize; i++)
      if ((op = fTable[i])) {                // attention: no ==
         if (op->TestBit(TObject::kNotDeleted))
            op->IsA()->AddInstance(op->IsOnHeap());
         else
            Error("UpdateInstCount", "oops 0x%lx\n", (Long_t)op);
      }
}

//______________________________________________________________________________
void *TObjectTable::CheckPtrAndWarn(const char *msg, void *vp)
{
   // Issue a warning in case an object still appears in the table
   // while it should not.

   if (fTable && vp && fTable[FindElement((TObject*)vp)]) {
      Remove((TObject*)vp);
      Warning("CheckPtrAndWarn", "%s (0x%lx)\n", msg, (Long_t)vp);
   }
   return vp;
}
 TObjectTable.cxx:1
 TObjectTable.cxx:2
 TObjectTable.cxx:3
 TObjectTable.cxx:4
 TObjectTable.cxx:5
 TObjectTable.cxx:6
 TObjectTable.cxx:7
 TObjectTable.cxx:8
 TObjectTable.cxx:9
 TObjectTable.cxx:10
 TObjectTable.cxx:11
 TObjectTable.cxx:12
 TObjectTable.cxx:13
 TObjectTable.cxx:14
 TObjectTable.cxx:15
 TObjectTable.cxx:16
 TObjectTable.cxx:17
 TObjectTable.cxx:18
 TObjectTable.cxx:19
 TObjectTable.cxx:20
 TObjectTable.cxx:21
 TObjectTable.cxx:22
 TObjectTable.cxx:23
 TObjectTable.cxx:24
 TObjectTable.cxx:25
 TObjectTable.cxx:26
 TObjectTable.cxx:27
 TObjectTable.cxx:28
 TObjectTable.cxx:29
 TObjectTable.cxx:30
 TObjectTable.cxx:31
 TObjectTable.cxx:32
 TObjectTable.cxx:33
 TObjectTable.cxx:34
 TObjectTable.cxx:35
 TObjectTable.cxx:36
 TObjectTable.cxx:37
 TObjectTable.cxx:38
 TObjectTable.cxx:39
 TObjectTable.cxx:40
 TObjectTable.cxx:41
 TObjectTable.cxx:42
 TObjectTable.cxx:43
 TObjectTable.cxx:44
 TObjectTable.cxx:45
 TObjectTable.cxx:46
 TObjectTable.cxx:47
 TObjectTable.cxx:48
 TObjectTable.cxx:49
 TObjectTable.cxx:50
 TObjectTable.cxx:51
 TObjectTable.cxx:52
 TObjectTable.cxx:53
 TObjectTable.cxx:54
 TObjectTable.cxx:55
 TObjectTable.cxx:56
 TObjectTable.cxx:57
 TObjectTable.cxx:58
 TObjectTable.cxx:59
 TObjectTable.cxx:60
 TObjectTable.cxx:61
 TObjectTable.cxx:62
 TObjectTable.cxx:63
 TObjectTable.cxx:64
 TObjectTable.cxx:65
 TObjectTable.cxx:66
 TObjectTable.cxx:67
 TObjectTable.cxx:68
 TObjectTable.cxx:69
 TObjectTable.cxx:70
 TObjectTable.cxx:71
 TObjectTable.cxx:72
 TObjectTable.cxx:73
 TObjectTable.cxx:74
 TObjectTable.cxx:75
 TObjectTable.cxx:76
 TObjectTable.cxx:77
 TObjectTable.cxx:78
 TObjectTable.cxx:79
 TObjectTable.cxx:80
 TObjectTable.cxx:81
 TObjectTable.cxx:82
 TObjectTable.cxx:83
 TObjectTable.cxx:84
 TObjectTable.cxx:85
 TObjectTable.cxx:86
 TObjectTable.cxx:87
 TObjectTable.cxx:88
 TObjectTable.cxx:89
 TObjectTable.cxx:90
 TObjectTable.cxx:91
 TObjectTable.cxx:92
 TObjectTable.cxx:93
 TObjectTable.cxx:94
 TObjectTable.cxx:95
 TObjectTable.cxx:96
 TObjectTable.cxx:97
 TObjectTable.cxx:98
 TObjectTable.cxx:99
 TObjectTable.cxx:100
 TObjectTable.cxx:101
 TObjectTable.cxx:102
 TObjectTable.cxx:103
 TObjectTable.cxx:104
 TObjectTable.cxx:105
 TObjectTable.cxx:106
 TObjectTable.cxx:107
 TObjectTable.cxx:108
 TObjectTable.cxx:109
 TObjectTable.cxx:110
 TObjectTable.cxx:111
 TObjectTable.cxx:112
 TObjectTable.cxx:113
 TObjectTable.cxx:114
 TObjectTable.cxx:115
 TObjectTable.cxx:116
 TObjectTable.cxx:117
 TObjectTable.cxx:118
 TObjectTable.cxx:119
 TObjectTable.cxx:120
 TObjectTable.cxx:121
 TObjectTable.cxx:122
 TObjectTable.cxx:123
 TObjectTable.cxx:124
 TObjectTable.cxx:125
 TObjectTable.cxx:126
 TObjectTable.cxx:127
 TObjectTable.cxx:128
 TObjectTable.cxx:129
 TObjectTable.cxx:130
 TObjectTable.cxx:131
 TObjectTable.cxx:132
 TObjectTable.cxx:133
 TObjectTable.cxx:134
 TObjectTable.cxx:135
 TObjectTable.cxx:136
 TObjectTable.cxx:137
 TObjectTable.cxx:138
 TObjectTable.cxx:139
 TObjectTable.cxx:140
 TObjectTable.cxx:141
 TObjectTable.cxx:142
 TObjectTable.cxx:143
 TObjectTable.cxx:144
 TObjectTable.cxx:145
 TObjectTable.cxx:146
 TObjectTable.cxx:147
 TObjectTable.cxx:148
 TObjectTable.cxx:149
 TObjectTable.cxx:150
 TObjectTable.cxx:151
 TObjectTable.cxx:152
 TObjectTable.cxx:153
 TObjectTable.cxx:154
 TObjectTable.cxx:155
 TObjectTable.cxx:156
 TObjectTable.cxx:157
 TObjectTable.cxx:158
 TObjectTable.cxx:159
 TObjectTable.cxx:160
 TObjectTable.cxx:161
 TObjectTable.cxx:162
 TObjectTable.cxx:163
 TObjectTable.cxx:164
 TObjectTable.cxx:165
 TObjectTable.cxx:166
 TObjectTable.cxx:167
 TObjectTable.cxx:168
 TObjectTable.cxx:169
 TObjectTable.cxx:170
 TObjectTable.cxx:171
 TObjectTable.cxx:172
 TObjectTable.cxx:173
 TObjectTable.cxx:174
 TObjectTable.cxx:175
 TObjectTable.cxx:176
 TObjectTable.cxx:177
 TObjectTable.cxx:178
 TObjectTable.cxx:179
 TObjectTable.cxx:180
 TObjectTable.cxx:181
 TObjectTable.cxx:182
 TObjectTable.cxx:183
 TObjectTable.cxx:184
 TObjectTable.cxx:185
 TObjectTable.cxx:186
 TObjectTable.cxx:187
 TObjectTable.cxx:188
 TObjectTable.cxx:189
 TObjectTable.cxx:190
 TObjectTable.cxx:191
 TObjectTable.cxx:192
 TObjectTable.cxx:193
 TObjectTable.cxx:194
 TObjectTable.cxx:195
 TObjectTable.cxx:196
 TObjectTable.cxx:197
 TObjectTable.cxx:198
 TObjectTable.cxx:199
 TObjectTable.cxx:200
 TObjectTable.cxx:201
 TObjectTable.cxx:202
 TObjectTable.cxx:203
 TObjectTable.cxx:204
 TObjectTable.cxx:205
 TObjectTable.cxx:206
 TObjectTable.cxx:207
 TObjectTable.cxx:208
 TObjectTable.cxx:209
 TObjectTable.cxx:210
 TObjectTable.cxx:211
 TObjectTable.cxx:212
 TObjectTable.cxx:213
 TObjectTable.cxx:214
 TObjectTable.cxx:215
 TObjectTable.cxx:216
 TObjectTable.cxx:217
 TObjectTable.cxx:218
 TObjectTable.cxx:219
 TObjectTable.cxx:220
 TObjectTable.cxx:221
 TObjectTable.cxx:222
 TObjectTable.cxx:223
 TObjectTable.cxx:224
 TObjectTable.cxx:225
 TObjectTable.cxx:226
 TObjectTable.cxx:227
 TObjectTable.cxx:228
 TObjectTable.cxx:229
 TObjectTable.cxx:230
 TObjectTable.cxx:231
 TObjectTable.cxx:232
 TObjectTable.cxx:233
 TObjectTable.cxx:234
 TObjectTable.cxx:235
 TObjectTable.cxx:236
 TObjectTable.cxx:237
 TObjectTable.cxx:238
 TObjectTable.cxx:239
 TObjectTable.cxx:240
 TObjectTable.cxx:241
 TObjectTable.cxx:242
 TObjectTable.cxx:243
 TObjectTable.cxx:244
 TObjectTable.cxx:245
 TObjectTable.cxx:246
 TObjectTable.cxx:247
 TObjectTable.cxx:248
 TObjectTable.cxx:249
 TObjectTable.cxx:250
 TObjectTable.cxx:251
 TObjectTable.cxx:252
 TObjectTable.cxx:253
 TObjectTable.cxx:254
 TObjectTable.cxx:255
 TObjectTable.cxx:256
 TObjectTable.cxx:257
 TObjectTable.cxx:258
 TObjectTable.cxx:259
 TObjectTable.cxx:260
 TObjectTable.cxx:261
 TObjectTable.cxx:262
 TObjectTable.cxx:263
 TObjectTable.cxx:264
 TObjectTable.cxx:265
 TObjectTable.cxx:266
 TObjectTable.cxx:267
 TObjectTable.cxx:268
 TObjectTable.cxx:269
 TObjectTable.cxx:270
 TObjectTable.cxx:271
 TObjectTable.cxx:272
 TObjectTable.cxx:273
 TObjectTable.cxx:274
 TObjectTable.cxx:275
 TObjectTable.cxx:276
 TObjectTable.cxx:277
 TObjectTable.cxx:278
 TObjectTable.cxx:279
 TObjectTable.cxx:280
 TObjectTable.cxx:281
 TObjectTable.cxx:282
 TObjectTable.cxx:283
 TObjectTable.cxx:284
 TObjectTable.cxx:285
 TObjectTable.cxx:286
 TObjectTable.cxx:287
 TObjectTable.cxx:288
 TObjectTable.cxx:289
 TObjectTable.cxx:290
 TObjectTable.cxx:291
 TObjectTable.cxx:292
 TObjectTable.cxx:293
 TObjectTable.cxx:294
 TObjectTable.cxx:295
 TObjectTable.cxx:296
 TObjectTable.cxx:297
 TObjectTable.cxx:298
 TObjectTable.cxx:299
 TObjectTable.cxx:300
 TObjectTable.cxx:301
 TObjectTable.cxx:302
 TObjectTable.cxx:303
 TObjectTable.cxx:304
 TObjectTable.cxx:305
 TObjectTable.cxx:306
 TObjectTable.cxx:307
 TObjectTable.cxx:308
 TObjectTable.cxx:309
 TObjectTable.cxx:310
 TObjectTable.cxx:311
 TObjectTable.cxx:312
 TObjectTable.cxx:313
 TObjectTable.cxx:314
 TObjectTable.cxx:315
 TObjectTable.cxx:316
 TObjectTable.cxx:317
 TObjectTable.cxx:318
 TObjectTable.cxx:319
 TObjectTable.cxx:320
 TObjectTable.cxx:321
 TObjectTable.cxx:322
 TObjectTable.cxx:323
 TObjectTable.cxx:324
 TObjectTable.cxx:325
 TObjectTable.cxx:326
 TObjectTable.cxx:327
 TObjectTable.cxx:328
 TObjectTable.cxx:329
 TObjectTable.cxx:330
 TObjectTable.cxx:331
 TObjectTable.cxx:332
 TObjectTable.cxx:333
 TObjectTable.cxx:334
 TObjectTable.cxx:335
 TObjectTable.cxx:336
 TObjectTable.cxx:337
 TObjectTable.cxx:338
 TObjectTable.cxx:339
 TObjectTable.cxx:340
 TObjectTable.cxx:341
 TObjectTable.cxx:342
 TObjectTable.cxx:343
 TObjectTable.cxx:344
 TObjectTable.cxx:345
 TObjectTable.cxx:346
 TObjectTable.cxx:347
 TObjectTable.cxx:348
 TObjectTable.cxx:349
 TObjectTable.cxx:350
 TObjectTable.cxx:351
 TObjectTable.cxx:352
 TObjectTable.cxx:353
 TObjectTable.cxx:354
 TObjectTable.cxx:355
 TObjectTable.cxx:356
 TObjectTable.cxx:357
 TObjectTable.cxx:358
 TObjectTable.cxx:359
 TObjectTable.cxx:360
 TObjectTable.cxx:361
 TObjectTable.cxx:362
 TObjectTable.cxx:363
 TObjectTable.cxx:364
 TObjectTable.cxx:365
 TObjectTable.cxx:366
 TObjectTable.cxx:367
 TObjectTable.cxx:368
 TObjectTable.cxx:369
 TObjectTable.cxx:370
 TObjectTable.cxx:371
 TObjectTable.cxx:372
 TObjectTable.cxx:373
 TObjectTable.cxx:374
 TObjectTable.cxx:375
 TObjectTable.cxx:376
 TObjectTable.cxx:377
 TObjectTable.cxx:378
 TObjectTable.cxx:379
 TObjectTable.cxx:380
 TObjectTable.cxx:381
 TObjectTable.cxx:382
 TObjectTable.cxx:383
 TObjectTable.cxx:384
 TObjectTable.cxx:385
 TObjectTable.cxx:386
 TObjectTable.cxx:387
 TObjectTable.cxx:388
 TObjectTable.cxx:389
 TObjectTable.cxx:390
 TObjectTable.cxx:391
 TObjectTable.cxx:392
 TObjectTable.cxx:393
 TObjectTable.cxx:394
 TObjectTable.cxx:395
 TObjectTable.cxx:396
 TObjectTable.cxx:397
 TObjectTable.cxx:398
 TObjectTable.cxx:399