00001 00002 #ifndef RELKEY_H 00003 #define RELKEY_H 00004 00005 00006 #include "GaudiKernel/SmartRef.h" 00007 #include <iostream> 00008 00025 namespace Event { 00026 00027 template <class T1, class T2> 00028 class Relation; 00029 00030 template <class T1, class T2, class T3> 00031 class RelKey { 00032 00033 public: 00034 00035 RelKey() {} 00036 RelKey(T1* obj): m_data(obj) {} 00037 00038 ~RelKey() {} 00039 00040 void setData(T1* obj) {m_data = obj;} 00041 const T1* getData() const { return m_data;} 00042 T1* getData() {return m_data;} 00043 00044 void setPrev(Relation<T2,T3>* rel) {m_prev = rel;} 00045 Relation<T2,T3>* getPrev() {return m_prev;} 00046 00047 void setSame(Relation<T2,T3>* rel) {m_same = rel;} 00048 Relation<T2,T3>* getSame() {return m_same;} 00049 00050 void setFirst(Relation<T2,T3>* rel) {m_first = rel;} 00051 Relation<T2,T3>* getFirst() {return m_first;} 00052 00054 void toStream(std::ostream& s) const; 00055 00056 private: 00057 00059 SmartRef<T1> m_data; 00061 SmartRef< Relation<T2,T3> > m_prev; 00063 SmartRef< Relation<T2,T3> > m_same; 00065 SmartRef< Relation<T2,T3> > m_first; 00066 00067 }; 00068 00069 00070 template <class T1, class T2, class T3> 00071 inline void RelKey<T1,T2,T3>::toStream(std::ostream& s) const 00072 { 00074 s << "\n Data = " << m_data 00075 << "\n Previous Relation = " << m_prev 00076 << "\n Next Relation = " << m_same 00077 << "\n First Different Data = " << m_first; 00078 } 00079 00080 } 00081 00082 #endif // RELKEY_H