00001
00002
00003
00004 #ifndef ATHCONTAINERS_UDSLABELHASHTABLE_H
00005 #define ATHCONTAINERS_UDSLABELHASHTABLE_H
00006
00007
00008 #ifdef XAOD_STANDALONE
00009 #error "UDSLabelHashTable.h is not to be used outside of Athena!"
00010 #endif // XAOD_STANDALONE
00011
00012
00013 #include "SGTools/crc64.h"
00014 #include <map>
00015 #include <string>
00016 #include "GaudiKernel/MsgStream.h"
00017
00018 #include <stdint.h>
00019
00020
00026 class UDSLabelHashTable {
00027
00028 public:
00029 typedef uint32_t hash_t;
00030
00031 enum {INVALID=0};
00032
00033 hash_t hash(const std::string& label) const;
00034 const std::string& getLabel(const hash_t number) const;
00035 hash_t addLabel(const std::string& label);
00036 void addLabel(const std::string& label, hash_t hash);
00037
00038 std::vector<const std::string*> getAllLabels() const;
00039
00040 size_t size() const {return m_hashLabels.size();}
00041
00042 typedef std::map<hash_t, std::string>::const_iterator const_iterator;
00043 const_iterator begin() const { return m_hashLabels.begin(); }
00044 const_iterator end() const { return m_hashLabels.end(); }
00045
00046 private:
00047 std::map<hash_t, std::string> m_hashLabels;
00048 std::string m_empty;
00049
00050
00051 };
00052
00053 inline
00054 UDSLabelHashTable::hash_t UDSLabelHashTable::hash(const std::string& label) const {
00055 const uint64_t hash64=SG::crc64(label);
00056 return (hash_t)(hash64 & 0xFFFFFFFF);
00057 }
00058
00059 #endif // not ATHCONTAINERS_UDSLABELHASHTABLE_H