/** * FairMultiLinkedData_Interface.h * * \date Dec 7, 2009 * \author T.Stockmanns */ #ifndef FairMultiLinkedData_Interface_H_ #define FairMultiLinkedData_Interface_H_ //#include "FairLinkedData.h" #include "FairLink.h" #include "FairMultiLinkedData.h" #include "TObject.h" #include "TRef.h" #include class FairMultiLinkedData_Interface : public TObject { public: FairMultiLinkedData_Interface(); FairMultiLinkedData_Interface(TString& branchName);///< Default constructor FairMultiLinkedData_Interface(TString& branchName, std::set links, Bool_t persistanceCheck = kTRUE);///< Constructor FairMultiLinkedData_Interface(TString& branchName, TString dataType, std::vector links, Int_t fileId = -1, Int_t evtId = -1,Bool_t persistanceCheck = kTRUE, Bool_t bypass = kFALSE, Float_t mult = 1.0);///< Constructor FairMultiLinkedData_Interface(TString& branchName, Int_t dataType, std::vector links, Int_t fileId = -1, Int_t evtId = -1, Bool_t persistanceCheck = kTRUE, Bool_t bypass = kFALSE, Float_t mult = 1.0);///< Constructor virtual ~FairMultiLinkedData_Interface() {}; void CreateLinkBranchName(TString& branchName) { fLinkBranchName = branchName; fLinkBranchName.Append("_link");} void SetLinkBranchName(TString& name){ fLinkBranchName = name; } // virtual FairMultiLinkedData GetLinksWithType(Int_t type) const {return FairMultiLinkedData();}; ///< Gives you a list of links which contain the given type // TObject* GetData(FairLink& myLink){return 0;}; ///< Get the TObject the Link is pointing to Int_t GetVerbose() {return fVerbose;} ///< Returns the verbosity level virtual void SetVerbose(Int_t level) {fVerbose = level;} ///< Sets the verbosity level // virtual Bool_t IsLinkInList(FairLink link) {return IsLinkInList(link.GetType(), link.GetIndex());} ///< Test if a given link is in fLinks // virtual Bool_t IsLinkInList(Int_t type, Int_t index){return false;}; ///< Same as IsLinkInList(FairLink) just with type and index given separately // virtual Int_t LinkPosInList(FairLink link) {return LinkPosInList(link.GetType(), link.GetIndex());} ///< returns position of link in fLinks. If it is not in the list -1 is returned // virtual Int_t LinkPosInList(Int_t type, Int_t index) {return -1;}; ///< Same as LinkPosInList(FairLink) // virtual void DeleteLink(FairLink link) {}; ///< Deletes a link ouf of fLinks // virtual void DeleteLink(Int_t type, Int_t index){}; ///< Deletes a link ouf of fLinks virtual void Reset() {ResetLinks();} virtual void ResetLinks(); ///< Clears fLinks TString GetLinkBranchName() const {return fLinkBranchName;} FairMultiLinkedData* GetPointerToData() const {return (FairMultiLinkedData*)fReferencePointerToData.GetObject();} virtual void SetLinks(FairMultiLinkedData links); ///< Sets the links as vector of FairLink virtual void SetLink(FairLink link); ///< Sets the Links with a single FairLink virtual void AddLinks(FairMultiLinkedData links); ///< Adds a List of FairLinks (FairMultiLinkedData_Interface) to fLinks virtual void AddLink(FairLink link); ///< Adds a FairLink link at the end of fLinks. If multi is kTRUE a link is allowed more than once otherwise it is stored only once // virtual void InsertLink(FairLink link); ///< Inserts a link into the list of links without persistance checking // virtual std::set GetLinks() const; ///< Returns a clone to the stored link data. The calling function has to delete it! virtual FairMultiLinkedData* GetMultiLinks() const; // virtual void Reset() {ResetLinks();} // virtual void ResetLinks() {fLinks.clear();} ///< Clears fLinks virtual std::set GetLinks(); ///< returns stored links as FairLinks virtual Int_t GetNLinks(); ///< returns the number of stored links virtual FairLink GetLink(Int_t pos); ///< returns the FairLink at the given position void Print(std::ostream& out = std::cout) const { if (fPointerToData > 0) out << "LinkData: " << *fPointerToData << std::endl; } ///< Output friend std::ostream& operator<< (std::ostream& out, const FairMultiLinkedData_Interface& data) { data.Print(out); return out; } ///< Output protected: FairMultiLinkedData* CreateFairMultiLinkedData(); void SetPointerToData(); TString fLinkBranchName; FairMultiLinkedData* fPointerToData; Bool_t fFairMultiLinkedDataExists; Int_t fVerbose; TRef fReferencePointerToData; ClassDef(FairMultiLinkedData_Interface, 3); }; /**\fn virtual void FairMultiLinkedData_Interface::SetLinks(Int_t type, std::vector links) * \param type as Int_t gives one type of source data for all indices * \param links as vector gives the vector of indices at which position in the TClonesArray the source data is stored */ /**\fn virtual void FairMultiLinkedData_Interface::SetLinks(std::vector type, std::vector links) * \param type as vector gives the type of source data (TClonesArray) * \param links as vector gives the vector of indices at which position in the TClonesArray the source data is stored */ #endif /* FairMultiLinkedData_Interface_H_ */