Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

DataItem.h

Go to the documentation of this file.
00001 #ifndef ANP_DATAITEM_H
00002 #define ANP_DATAITEM_H
00003 
00004 // $Id: DataItem.h,v 1.14 2008/02/22 22:07:16 rustem Exp $
00005 //
00006 // Template for (key, data) pair
00007 //
00008 
00009 // C++
00010 #include <iostream>
00011 #include <string>
00012 #include <vector>
00013 
00014 // ROOT
00015 #include "Rtypes.h"
00016 
00017 namespace Anp
00018 {   
00019    template<class K, class D>
00020    class DataItem
00021    {
00022    public:
00023       
00024       DataItem();
00025       DataItem(const K key_, const D data_);     
00026       ~DataItem();
00027 
00028       void Set(const K key_, const D data_);
00029       void SetData(const D data_);
00030       void SetKey(const K key_);
00031 
00032       D Data() const;
00033       K Key()  const;
00034 
00035    private:
00036 
00037       K key;
00038       D data;
00039    };
00040 
00041    template<class K, class D>
00042       bool operator < (const DataItem<K, D> &lhs, const DataItem<K, D> &rhs);
00043 
00044    template<class K, class D>
00045       bool operator < (const DataItem<K, D> &lhs, const K &rhs);
00046    
00047    template<class K, class D>
00048       bool operator < (const K &lhs, const DataItem<K, D> &rhs);
00049 
00050    template<class K, class D>
00051       bool operator == (const DataItem<K, D> &lhs, const DataItem<K, D> &rhs);
00052 
00053    template<class K, class D>
00054       bool operator == (const DataItem<K, D> &lhs, const K &rhs);
00055    
00056    template<class K, class D>
00057       bool operator == (const K &lhs, const DataItem<K, D> &rhs);
00058 
00059    //------------------------------------------------------------------------
00060    // typedefs for commonly used types
00061    //------------------------------------------------------------------------
00062    typedef DataItem<std::string, Float_t> StringData;
00063    typedef DataItem<Short_t, Float_t> Data;
00064    typedef std::vector<Anp::Data> DataVec;
00065    typedef DataVec::const_iterator DataIter;
00066    typedef DataVec::iterator DataIterator;
00067 
00068    std::ostream &operator<<(std::ostream& os, const Data &data);
00069 
00070    //------------------------------------------------------------------------
00071    // Inlined member functions
00072    //------------------------------------------------------------------------
00073    template<class K, class D> DataItem<K, D>::DataItem() {}
00074    template<class K, class D> DataItem<K, D>::DataItem(const K key_, const D data_) 
00075       :key(key_),
00076        data(data_)
00077    {
00078    }     
00079 
00080    template<class K, class D> DataItem<K, D>::~DataItem() {}
00081 
00082    template<class K, class D> void DataItem<K, D>::Set(const K key_, const D data_)
00083    { 
00084       key  = key_;
00085       data = data_;
00086    }
00087    template<class K, class D> void DataItem<K, D>::SetData(const D data_)
00088    { 
00089       data = data_;
00090    }
00091    template<class K, class D> void DataItem<K, D>::SetKey(const K key_)
00092    { 
00093       key  = key_;
00094    }
00095 
00096    template<class K, class D> D DataItem<K, D>::Data() const { return data; }
00097    template<class K, class D> K DataItem<K, D>::Key()  const { return key; }
00098 
00099    //------------------------------------------------------------------------
00100    // Inlined global functions
00101    //------------------------------------------------------------------------
00102    template<class K, class D>
00103       inline bool operator < (const DataItem<K, D> &lhs, const DataItem<K, D> &rhs)
00104    {
00105       return (lhs.Key() < rhs.Key());
00106    }
00107 
00108    template<class K, class D>
00109       inline bool operator < (const DataItem<K, D> &lhs, const K &rhs)
00110    {
00111       return (lhs.Key() < rhs);
00112    }
00113    
00114    template<class K, class D>
00115       inline bool operator < (const K &lhs, const DataItem<K, D> &rhs)
00116    {
00117       return (lhs < rhs.Key());
00118    }
00119 
00120    template<class K, class D>
00121       inline bool operator == (const DataItem<K, D> &lhs, const DataItem<K, D> &rhs)
00122    {
00123       return (lhs.Key() == rhs.Key());
00124    }
00125 
00126    template<class K, class D>
00127       inline bool operator == (const DataItem<K, D> &lhs, const K &rhs)
00128    {
00129       return (lhs.Key() == rhs);
00130    }
00131    
00132    template<class K, class D>
00133       inline bool operator == (const K &lhs, const DataItem<K, D> &rhs)
00134    {
00135       return (lhs == rhs.Key());
00136    }
00137 
00138    inline std::ostream &operator<<(std::ostream& os, const Data &data)
00139    {
00140       os  << "data[" << data.Key() << "]=" << data.Data();
00141       return os;
00142    }
00143 }
00144 
00145 #endif

Generated on Mon Feb 15 11:06:33 2010 for loon by  doxygen 1.3.9.1