// @(#)root/meta:$Id$
// Author: Axel Naumann 2014-04-28

/*************************************************************************
 * Copyright (C) 1995-2014, 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_TProtoClass
#define ROOT_TProtoClass

#ifndef ROOT_TNamed
#include "TNamed.h"
#endif

class TClass;
class TList;
class TRealData;

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TProtoClass                                                          //
//                                                                      //
// Stores enough information to create a TClass from a dictionary       //
// without interpreter information.                                     //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

class TProtoClass: public TNamed {
public:
   class TProtoRealData: public TNamed {
      Long_t fOffset; // data member offset
      enum {
         kIsObject = BIT(15) // member is an object
      };
   public:
      TProtoRealData() {}
      TProtoRealData(const TRealData* rd);
      virtual ~TProtoRealData();
      TRealData* CreateRealData(TClass* currentClass) const;
      ClassDef(TProtoRealData, 2);//Persistent version of TRealData
   };

private:
   TList   *fBase;     // List of base classes
   TList   *fData;     // List of data members
   TList   *fPRealData;// List of TProtoRealData
   Int_t    fSizeof;   // Size of the class
   Int_t    fCanSplit; // Whether this class can be split
   Int_t    fStreamerType; // Which streaming method to use
   Long_t   fProperty; // Class properties, see EProperties
   Long_t   fClassProperty; // Class C++ properties, see EClassProperties
   Long_t   fOffsetStreamer; // Offset to streamer function

   TProtoClass(const TProtoClass&) = delete;
   TProtoClass& operator=(const TProtoClass&) = delete;

public:
   TProtoClass():
      fBase(0), fData(0), fPRealData(0), fSizeof(0), fCanSplit(0),
      fStreamerType(0), fProperty(0), fClassProperty(0),
      fOffsetStreamer(0)
   {}

   TProtoClass(TClass* cl);
   virtual ~TProtoClass();

   Bool_t FillTClass(TClass* pcl);
   void Delete(Option_t* opt = "");

   ClassDef(TProtoClass,2); //Persistent TClass
};

#endif
 TProtoClass.h:1
 TProtoClass.h:2
 TProtoClass.h:3
 TProtoClass.h:4
 TProtoClass.h:5
 TProtoClass.h:6
 TProtoClass.h:7
 TProtoClass.h:8
 TProtoClass.h:9
 TProtoClass.h:10
 TProtoClass.h:11
 TProtoClass.h:12
 TProtoClass.h:13
 TProtoClass.h:14
 TProtoClass.h:15
 TProtoClass.h:16
 TProtoClass.h:17
 TProtoClass.h:18
 TProtoClass.h:19
 TProtoClass.h:20
 TProtoClass.h:21
 TProtoClass.h:22
 TProtoClass.h:23
 TProtoClass.h:24
 TProtoClass.h:25
 TProtoClass.h:26
 TProtoClass.h:27
 TProtoClass.h:28
 TProtoClass.h:29
 TProtoClass.h:30
 TProtoClass.h:31
 TProtoClass.h:32
 TProtoClass.h:33
 TProtoClass.h:34
 TProtoClass.h:35
 TProtoClass.h:36
 TProtoClass.h:37
 TProtoClass.h:38
 TProtoClass.h:39
 TProtoClass.h:40
 TProtoClass.h:41
 TProtoClass.h:42
 TProtoClass.h:43
 TProtoClass.h:44
 TProtoClass.h:45
 TProtoClass.h:46
 TProtoClass.h:47
 TProtoClass.h:48
 TProtoClass.h:49
 TProtoClass.h:50
 TProtoClass.h:51
 TProtoClass.h:52
 TProtoClass.h:53
 TProtoClass.h:54
 TProtoClass.h:55
 TProtoClass.h:56
 TProtoClass.h:57
 TProtoClass.h:58
 TProtoClass.h:59
 TProtoClass.h:60
 TProtoClass.h:61
 TProtoClass.h:62
 TProtoClass.h:63
 TProtoClass.h:64
 TProtoClass.h:65
 TProtoClass.h:66
 TProtoClass.h:67
 TProtoClass.h:68
 TProtoClass.h:69
 TProtoClass.h:70
 TProtoClass.h:71
 TProtoClass.h:72
 TProtoClass.h:73
 TProtoClass.h:74
 TProtoClass.h:75
 TProtoClass.h:76
 TProtoClass.h:77
 TProtoClass.h:78