1 //--------------------------------------------------------------------------
4 // This software is part of the EvtGen package developed jointly
5 // for the BaBar and CLEO collaborations. If you use all or part
6 // of it, please give an appropriate acknowledgement.
8 // Copyright Information: See EvtGen/COPYRIGHT
9 // Copyright (C) 1998 Caltech, UCSB
11 // Module: EvtGen/EvtSpinDensity.hh
13 // Description: Templated class to implement a hash table on string
15 // Modification history:
17 // RYD Aug 2, 2006 Module created
19 //------------------------------------------------------------------------
22 #ifndef EVTSTRINGHASH_HH
23 #define EVTSTRINGHASH_HH
32 inline EvtStringHash(int size);
33 inline void add(const std::string& str,T* data);
34 inline T* get(const std::string& str);
35 inline ~EvtStringHash();
40 inline int hash(const std::string& str);
41 std::string*** _strings;
49 EvtStringHash<T>::EvtStringHash(int size){
53 typedef std::string** EvtStringPtrPtr;
56 _strings=new EvtStringPtrPtr[_size];
57 _data=new TPtrPtr[_size];
58 _entries=new int[_size];
69 EvtStringHash<T>::~EvtStringHash(){
74 for(j=0;j<_entries[i];j++){
75 delete _strings[i][j];
78 delete [] _strings[i];
90 void EvtStringHash<T>::add(const std::string& str,T* data){
94 typedef std::string* EvtStringPtr;
97 std::string** newstrings=new EvtStringPtr[_entries[ihash]+1];
98 T** newdata=new TPtr[_entries[ihash]+1];
102 for(i=0;i<_entries[ihash];i++){
103 newstrings[i]=_strings[ihash][i];
104 newdata[i]=_data[ihash][i];
107 newstrings[_entries[ihash]]=new std::string;
108 *(newstrings[_entries[ihash]])=str;
109 newdata[_entries[ihash]]=data;
112 if(_entries[ihash]!=0){
113 delete [] _strings[ihash];
114 delete [] _data[ihash];
119 _strings[ihash]=newstrings;
120 _data[ihash]=newdata;
125 T* EvtStringHash<T>::get(const std::string& str){
131 for (i=0;i<_entries[ihash];i++){
132 if (*(_strings[ihash][i])==str) return _data[ihash][i];
142 int EvtStringHash<T>::hash(const std::string& str){
144 const char* cstr=str.c_str();