ROOT logo
// @(#)root/treeplayer:$Id: TBranchProxyClassDescriptor.h 21704 2008-01-14 22:52:10Z pcanal $
// Author: Philippe Canal 06/06/2004

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

#ifndef ROOT_TBranchProxyClassDescriptor
#define ROOT_TBranchProxyClassDescriptor

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

class TTree;
class TVirtualStreamerInfo;

namespace ROOT {

   class TBranchProxyDescriptor;

   class TBranchProxyClassDescriptor : public TNamed {

   public:
      enum ELocation { kOut=0, kClones, kSTL, kInsideClones, kInsideSTL }; // for IsClones
   private:
      TList          fListOfSubProxies;
      TList          fListOfBaseProxies;
      ELocation      fIsClones;      // 1 for the general case, 2 when this a split clases inside a TClonesArray, 3 when this is a split classes inside an STL container.
      TString        fContainerName; // Name of the container if any
      Bool_t         fIsLeafList;    // true if the branch was constructed from a leaf list.
      UInt_t         fSplitLevel;

      TString        fRawSymbol;
      TString        fBranchName;
      TString        fSubBranchPrefix;
      TVirtualStreamerInfo *fInfo;     // TVirtualStreamerInfo describing this class

      UInt_t  fMaxDatamemberType;

      void NameToSymbol();

      TBranchProxyClassDescriptor(const TBranchProxyClassDescriptor &b) :TNamed(b){;}
      TBranchProxyClassDescriptor& operator=(const TBranchProxyClassDescriptor&) {return *this;}

   public:

      TBranchProxyClassDescriptor(const char *type, TVirtualStreamerInfo *info, const char *branchname,
                                  ELocation isclones, UInt_t splitlevel, const TString &containerName);
      TBranchProxyClassDescriptor(const char *branchname);

      TBranchProxyClassDescriptor(const char *type, TVirtualStreamerInfo *info, const char *branchname,
                                  const char *branchPrefix, ELocation isclones,
                                  UInt_t splitlevel, const TString &containerName);

      const char* GetBranchName() const;
      const char* GetSubBranchPrefix() const;

      const char* GetRawSymbol() const;
      
      TVirtualStreamerInfo *GetInfo() const { return fInfo; }

      UInt_t GetSplitLevel() const;

      virtual Bool_t IsEquivalent(const TBranchProxyClassDescriptor* other);

      void AddDescriptor(TBranchProxyDescriptor *desc, Bool_t isBase);
      Bool_t IsLoaded() const;
      static Bool_t IsLoaded(const char*);
      Bool_t IsClones() const;
      Bool_t IsSTL() const;
      ELocation GetIsClones() const;
      TString GetContainerName() const;

      void OutputDecl(FILE *hf, int offset, UInt_t /* maxVarname */);

      ClassDef(TBranchProxyClassDescriptor,0); // Class to cache the information we gathered about the branch and its content
   };

}

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