ROOT logo
// @(#)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.             *
 *************************************************************************/

#ifndef ROOT_TClassTable
#define ROOT_TClassTable


//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TClassTable                                                          //
//                                                                      //
// This class registers for all classes their name, id and dictionary   //
// function in a hash table.                                            //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TObject
#include "TObject.h"
#endif
#ifndef ROOT_TString
#include "TString.h"
#endif

class TClassRec {
public:
   char            *fName;
   Version_t        fId;
   Int_t            fBits;
   VoidFuncPtr_t    fDict;
   const type_info *fInfo;
   TClassRec       *fNext;
};

namespace ROOT {
   class TMapTypeToClassRec;
}

class TClassTable : public TObject {

friend  void ROOT::ResetClassVersion(TClass*, const char*, Short_t);
friend  class TROOT;

private:
   typedef ROOT::TMapTypeToClassRec IdMap_t;

   static TClassRec  **fgTable;
   static TClassRec  **fgSortedTable;
   static IdMap_t     *fgIdMap;
   static int          fgSize;
   static int          fgTally;
   static Bool_t       fgSorted;
   static int          fgCursor;

   TClassTable();

   static TClassRec   *FindElementImpl(const char *cname, Bool_t insert);
   static TClassRec   *FindElement(const char *cname, Bool_t insert=kFALSE);
   static void         SortTable();

public:
   // bits that can be set in pragmabits
   enum { kNoStreamer = 0x01, kNoInputOperator = 0x02, kAutoStreamer = 0x04 };

   ~TClassTable();

   static void          Add(const char *cname, Version_t id,
                            const type_info &info, VoidFuncPtr_t dict,
                            Int_t pragmabits);
   static char         *At(int index);
   int                  Classes();
   static Version_t     GetID(const char *cname);
   static Int_t         GetPragmaBits(const char *name);
   static VoidFuncPtr_t GetDict(const char *cname);
   static VoidFuncPtr_t GetDict(const type_info& info);
   static void          Init();
   static char         *Next();
   void                 Print(Option_t *option="") const;
   static void          PrintTable();
   static void          Remove(const char *cname);
   static void          Terminate();

   ClassDef(TClassTable,0)  //Table of known classes
};

R__EXTERN TClassTable *gClassTable;

namespace ROOT {
   extern void AddClass(const char *cname, Version_t id, VoidFuncPtr_t dict,
                        Int_t pragmabits);
   extern void RemoveClass(const char *cname);
}

#endif
 TClassTable.h:1
 TClassTable.h:2
 TClassTable.h:3
 TClassTable.h:4
 TClassTable.h:5
 TClassTable.h:6
 TClassTable.h:7
 TClassTable.h:8
 TClassTable.h:9
 TClassTable.h:10
 TClassTable.h:11
 TClassTable.h:12
 TClassTable.h:13
 TClassTable.h:14
 TClassTable.h:15
 TClassTable.h:16
 TClassTable.h:17
 TClassTable.h:18
 TClassTable.h:19
 TClassTable.h:20
 TClassTable.h:21
 TClassTable.h:22
 TClassTable.h:23
 TClassTable.h:24
 TClassTable.h:25
 TClassTable.h:26
 TClassTable.h:27
 TClassTable.h:28
 TClassTable.h:29
 TClassTable.h:30
 TClassTable.h:31
 TClassTable.h:32
 TClassTable.h:33
 TClassTable.h:34
 TClassTable.h:35
 TClassTable.h:36
 TClassTable.h:37
 TClassTable.h:38
 TClassTable.h:39
 TClassTable.h:40
 TClassTable.h:41
 TClassTable.h:42
 TClassTable.h:43
 TClassTable.h:44
 TClassTable.h:45
 TClassTable.h:46
 TClassTable.h:47
 TClassTable.h:48
 TClassTable.h:49
 TClassTable.h:50
 TClassTable.h:51
 TClassTable.h:52
 TClassTable.h:53
 TClassTable.h:54
 TClassTable.h:55
 TClassTable.h:56
 TClassTable.h:57
 TClassTable.h:58
 TClassTable.h:59
 TClassTable.h:60
 TClassTable.h:61
 TClassTable.h:62
 TClassTable.h:63
 TClassTable.h:64
 TClassTable.h:65
 TClassTable.h:66
 TClassTable.h:67
 TClassTable.h:68
 TClassTable.h:69
 TClassTable.h:70
 TClassTable.h:71
 TClassTable.h:72
 TClassTable.h:73
 TClassTable.h:74
 TClassTable.h:75
 TClassTable.h:76
 TClassTable.h:77
 TClassTable.h:78
 TClassTable.h:79
 TClassTable.h:80
 TClassTable.h:81
 TClassTable.h:82
 TClassTable.h:83
 TClassTable.h:84
 TClassTable.h:85
 TClassTable.h:86
 TClassTable.h:87
 TClassTable.h:88
 TClassTable.h:89
 TClassTable.h:90
 TClassTable.h:91
 TClassTable.h:92
 TClassTable.h:93
 TClassTable.h:94
 TClassTable.h:95
 TClassTable.h:96
 TClassTable.h:97
 TClassTable.h:98
 TClassTable.h:99
 TClassTable.h:100
 TClassTable.h:101