ROOT logo
// @(#)root/base:$Id$
// Author: Philippe Canal  13/05/2003

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

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TFriendProxy                                                         //
//                                                                      //
// Concrete implementation of the proxy around a Friend Tree.           //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TFriendProxy.h"
#include "TTree.h"
#include "TList.h"
#include "TFriendElement.h"

ClassImp(ROOT::TFriendProxy);

namespace ROOT {

   //------------------------------------------------------------------------------------
   TFriendProxy::TFriendProxy() : fDirector(0,-1), fIndex(-1)
   {
   }

   //------------------------------------------------------------------------------------
   TFriendProxy::TFriendProxy(TBranchProxyDirector *director, TTree *main, Int_t index) :
      fDirector(0,-1), fIndex(index)
   {
      // Constructor.

      if (main && main->GetListOfFriends()) {
         TObject *obj = main->GetListOfFriends()->At(fIndex);
         TFriendElement *element = dynamic_cast<TFriendElement*>( obj );
         if (element) fDirector.SetTree(element->GetTree());
      }
      director->Attach(this);
   }

   //------------------------------------------------------------------------------------
   Long64_t TFriendProxy::GetReadEntry() const
   {
      // Return the entry number currently being looked at.

      return fDirector.GetReadEntry();
   }

   //------------------------------------------------------------------------------------
   void TFriendProxy::ResetReadEntry()
   {
      // Refresh the cached read entry number from the original tree.

      // The 2nd call to GetTree is to insure we get the 'local' tree's entry in the case of a
      // chain.
      if (fDirector.GetTree()) fDirector.SetReadEntry(fDirector.GetTree()->GetTree()->GetReadEntry());
   }

  //------------------------------------------------------------------------------------
   void TFriendProxy::Update(TTree *newmain)
   {
      // Update the address of the underlying tree.

      if (newmain && newmain->GetListOfFriends()) {
         TObject *obj = newmain->GetListOfFriends()->At(fIndex);
         TFriendElement *element = dynamic_cast<TFriendElement*>( obj );
         if (element) fDirector.SetTree(element->GetTree());
         else fDirector.SetTree(0);
      } else {
         fDirector.SetTree(0);
      }
   }
}
 TFriendProxy.cxx:1
 TFriendProxy.cxx:2
 TFriendProxy.cxx:3
 TFriendProxy.cxx:4
 TFriendProxy.cxx:5
 TFriendProxy.cxx:6
 TFriendProxy.cxx:7
 TFriendProxy.cxx:8
 TFriendProxy.cxx:9
 TFriendProxy.cxx:10
 TFriendProxy.cxx:11
 TFriendProxy.cxx:12
 TFriendProxy.cxx:13
 TFriendProxy.cxx:14
 TFriendProxy.cxx:15
 TFriendProxy.cxx:16
 TFriendProxy.cxx:17
 TFriendProxy.cxx:18
 TFriendProxy.cxx:19
 TFriendProxy.cxx:20
 TFriendProxy.cxx:21
 TFriendProxy.cxx:22
 TFriendProxy.cxx:23
 TFriendProxy.cxx:24
 TFriendProxy.cxx:25
 TFriendProxy.cxx:26
 TFriendProxy.cxx:27
 TFriendProxy.cxx:28
 TFriendProxy.cxx:29
 TFriendProxy.cxx:30
 TFriendProxy.cxx:31
 TFriendProxy.cxx:32
 TFriendProxy.cxx:33
 TFriendProxy.cxx:34
 TFriendProxy.cxx:35
 TFriendProxy.cxx:36
 TFriendProxy.cxx:37
 TFriendProxy.cxx:38
 TFriendProxy.cxx:39
 TFriendProxy.cxx:40
 TFriendProxy.cxx:41
 TFriendProxy.cxx:42
 TFriendProxy.cxx:43
 TFriendProxy.cxx:44
 TFriendProxy.cxx:45
 TFriendProxy.cxx:46
 TFriendProxy.cxx:47
 TFriendProxy.cxx:48
 TFriendProxy.cxx:49
 TFriendProxy.cxx:50
 TFriendProxy.cxx:51
 TFriendProxy.cxx:52
 TFriendProxy.cxx:53
 TFriendProxy.cxx:54
 TFriendProxy.cxx:55
 TFriendProxy.cxx:56
 TFriendProxy.cxx:57
 TFriendProxy.cxx:58
 TFriendProxy.cxx:59
 TFriendProxy.cxx:60
 TFriendProxy.cxx:61
 TFriendProxy.cxx:62
 TFriendProxy.cxx:63
 TFriendProxy.cxx:64
 TFriendProxy.cxx:65
 TFriendProxy.cxx:66
 TFriendProxy.cxx:67
 TFriendProxy.cxx:68
 TFriendProxy.cxx:69
 TFriendProxy.cxx:70
 TFriendProxy.cxx:71
 TFriendProxy.cxx:72
 TFriendProxy.cxx:73
 TFriendProxy.cxx:74
 TFriendProxy.cxx:75
 TFriendProxy.cxx:76
 TFriendProxy.cxx:77
 TFriendProxy.cxx:78
 TFriendProxy.cxx:79
 TFriendProxy.cxx:80