00001
00020 #ifndef TDATAITEM_H
00021 #define TDATAITEM_H
00022
00023 #include <iostream>
00024 #include <functional>
00025
00026 #include <Rtypes.h>
00027
00028 using std::cout;
00029 using std::endl;
00030 using std::dec;
00031 using std::unary_function;
00032 using std::binary_function;
00033
00034 template<typename T>
00035 class TDataItem;
00036
00037 template<typename T>
00038 class TDataItem {
00039 public:
00040 TDataItem();
00041 TDataItem(UShort_t, T);
00042 virtual ~TDataItem();
00043 void SetItem(UShort_t, T);
00044 void SetChannel(UShort_t);
00045 void SetValue(T);
00046 UShort_t GetChannel() const;
00047 T GetValue() const;
00048 void Print(const Char_t * = "") const;
00049
00050 private:
00053 UShort_t fChannel;
00056 T fValue;
00057
00058
00059
00060 ClassDef(TDataItem, 1)
00061 };
00062
00063
00064
00065 templateClassImp(TDataItem)
00066
00067 template<typename T>
00068 inline TDataItem<T>::TDataItem()
00069 : fChannel(0), fValue(0)
00070 {
00074 }
00075
00076 template<typename T>
00077 inline TDataItem<T>::TDataItem(UShort_t chan, T val)
00078 : fChannel(chan), fValue(val)
00079 {
00083 }
00084
00085 template<typename T>
00086 inline TDataItem<T>::~TDataItem()
00087 {
00090 }
00091
00092 template<typename T>
00093 inline void TDataItem<T>::SetItem(UShort_t chan, T val)
00094 {
00098 fChannel = chan;
00099 fValue = val;
00100 }
00101
00102 template<typename T>
00103 inline void TDataItem<T>::SetChannel(UShort_t chan)
00104 {
00110 fChannel = chan;
00111 }
00112
00113 template<typename T>
00114 inline void TDataItem<T>::SetValue(T val)
00115 {
00121 fValue = val;
00122 }
00123
00124 template<typename T>
00125 inline UShort_t TDataItem<T>::GetChannel() const
00126 {
00130 return fChannel;
00131 }
00132
00133 template<typename T>
00134 inline T TDataItem<T>::GetValue() const
00135 {
00139 return fValue;
00140 }
00141
00142 template<typename T>
00143 inline void TDataItem<T>::Print(const Char_t *what) const
00144 {
00149 cout << what << "channel=" << dec << fChannel << " value=" << fValue << endl;
00150 }
00151
00161 template<typename T>
00162 class EqualChannel;
00163
00164 template<typename T>
00165 class EqualChannel : public unary_function<TDataItem<T>, Bool_t> {
00166 public:
00167 EqualChannel(T);
00168 Bool_t operator()(const TDataItem<T> &) const;
00169
00170 private:
00173 T fChannel;
00174 };
00175
00176 template<typename T>
00177 inline EqualChannel<T>::EqualChannel(T channel) : fChannel(channel)
00178 {
00182 }
00183
00184 template<typename T>
00185 inline Bool_t EqualChannel<T>::operator()(const TDataItem<T> &item) const
00186 {
00192 return item.GetChannel() == fChannel;
00193 }
00194
00204 template<typename T>
00205 class GreaterValue;
00206
00207 template<typename T>
00208 class GreaterValue : public
00209 binary_function<const TDataItem<T> *, const TDataItem<T> *, Bool_t> {
00210 public:
00211 Bool_t operator()(const TDataItem<T> *, const TDataItem<T> *) const;
00212 };
00213
00214 template<typename T>
00215 inline Bool_t GreaterValue<T>::operator()(const TDataItem<T> *a,
00216 const TDataItem<T> *b) const
00217 {
00223 return a->GetValue() > b->GetValue();
00224 }
00225
00226 #endif // TDataItem.h