/*! \brief Implementation of TATOFparaDsc. */ #include "TClass.h" #include "TList.h" #include "TATOFroot.h" #include "TATOFaction.h" #include "TATOFparaDsc.h" /*! \class TATOFparaDsc TATOFparaDsc.hxx "TATOFparaDsc.hxx" \brief Persistent descriptor for parameter object . ** */ ClassImp(TATOFparaDsc); //------------------------------------------+----------------------------------- //! Default constructor. TATOFparaDsc::TATOFparaDsc(const char* name, TATOFpara* p_para) : TATOFnamed(name, 0), fpObject(0), fpObjectClass(0), fpConsumerList(0) { if (!gTATOFroot) Fatal("TATOFparaDsc()", "TATOFroot not instantiated"); SetBit(kMustCleanup); if (name==0 || name[0]==0) SetName(gTATOFroot->DefaultParaDscName()); if (gTATOFroot->FindParaDsc(GetName())) { Warning("TATOFparaDsc()", "Parameter descriptor with name '%s' already exists", GetName()); } gTATOFroot->ListOfParaDsc()->Add(this); if (p_para) { fpObject = p_para; fpObjectClass = p_para->IsA(); SetTitle(p_para->IsA()->GetName()); } } //------------------------------------------+----------------------------------- //! Destructor. TATOFparaDsc::~TATOFparaDsc() { delete fpObject; } //------------------------------------------+----------------------------------- //! Set para object. void TATOFparaDsc::SetObject(TATOFpara* p_para) { delete fpObject; fpObject = p_para; if (p_para == 0) ResetBit(kValid); return; } //------------------------------------------+----------------------------------- //! Set consumer action. void TATOFparaDsc::SetConsumer(TATOFaction* p_action) { if (!fpConsumerList) fpConsumerList = new TList(); fpConsumerList->Add(p_action); return; } //------------------------------------------+----------------------------------- //! Invalidate para object. void TATOFparaDsc::Clear(Option_t*) { if (fpObject) fpObject->Clear(); ResetBit(kValid|kFail); return; } /*------------------------------------------+---------------------------------*/ //! ostream insertion. void TATOFparaDsc::ToStream(ostream& os, Option_t* option) const { os << "TATOFparaDsc: " << "'" << GetName() << "'" << endl; if (fpObjectClass) { os << " object class: " << fpObjectClass->GetName() << endl; } if (fpConsumerList) { const char* pref = " consumer: "; for (TObjLink* lnk = fpConsumerList->FirstLink(); lnk; lnk=lnk->Next()) { TObject* p = lnk->GetObject(); os << pref << p->IsA()->GetName() << " '" << p->GetName() << "'" << endl; pref = " "; } } return; } //------------------------------------------+----------------------------------- //! Cleanup dangling object references to TObject \a p_obj . void TATOFparaDsc::RecursiveRemove(TObject* p_obj) { if (fpConsumerList) while (fpConsumerList->Remove(p_obj)); return; }