#include <EvtStringHash.hh>
Public Member Functions | |
EvtStringHash (int size) | |
void | add (const std::string &str, T *data) |
T * | get (const std::string &str) |
~EvtStringHash () | |
Private Member Functions | |
EvtStringHash () | |
int | hash (const std::string &str) |
Private Attributes | |
int | _size |
std::string *** | _strings |
T *** | _data |
int * | _entries |
Definition at line 13 of file EvtStringHash.hh.
EvtStringHash< T >::EvtStringHash | ( | int | size | ) | [inline] |
Definition at line 33 of file EvtStringHash.hh.
References EvtStringHash< T >::_data, EvtStringHash< T >::_entries, EvtStringHash< T >::_size, EvtStringHash< T >::_strings, genRecEmupikp::i, deljobs::string, and T.
00033 { 00034 00035 _size=size; 00036 00037 typedef std::string** EvtStringPtrPtr; 00038 typedef T** TPtrPtr; 00039 00040 _strings=new EvtStringPtrPtr[_size]; 00041 _data=new TPtrPtr[_size]; 00042 _entries=new int[_size]; 00043 00044 int i; 00045 00046 for(i=0;i<_size;i++){ 00047 _entries[i]=0; 00048 } 00049 00050 }
EvtStringHash< T >::~EvtStringHash | ( | ) | [inline] |
Definition at line 53 of file EvtStringHash.hh.
References EvtStringHash< T >::_data, EvtStringHash< T >::_entries, EvtStringHash< T >::_size, EvtStringHash< T >::_strings, genRecEmupikp::i, and ganga-rec::j.
00053 { 00054 00055 int i; 00056 for(i=0;i<_size;i++){ 00057 int j; 00058 for(j=0;j<_entries[i];j++){ 00059 delete _strings[i][j]; 00060 } 00061 if (_entries[i]>0){ 00062 delete [] _strings[i]; 00063 delete [] _data[i]; 00064 } 00065 } 00066 00067 delete [] _strings; 00068 delete [] _data; 00069 delete [] _entries; 00070 00071 }
EvtStringHash< T >::EvtStringHash | ( | ) | [private] |
void EvtStringHash< T >::add | ( | const std::string & | str, | |
T * | data | |||
) | [inline] |
Definition at line 74 of file EvtStringHash.hh.
References EvtStringHash< T >::_data, EvtStringHash< T >::_entries, EvtStringHash< T >::_strings, EvtStringHash< T >::hash(), genRecEmupikp::i, deljobs::string, and T.
00074 { 00075 00076 int ihash=hash(str); 00077 00078 typedef std::string* EvtStringPtr; 00079 typedef T* TPtr; 00080 00081 std::string** newstrings=new EvtStringPtr[_entries[ihash]+1]; 00082 T** newdata=new TPtr[_entries[ihash]+1]; 00083 00084 int i; 00085 00086 for(i=0;i<_entries[ihash];i++){ 00087 newstrings[i]=_strings[ihash][i]; 00088 newdata[i]=_data[ihash][i]; 00089 } 00090 00091 newstrings[_entries[ihash]]=new std::string; 00092 *(newstrings[_entries[ihash]])=str; 00093 newdata[_entries[ihash]]=data; 00094 00095 00096 if(_entries[ihash]!=0){ 00097 delete [] _strings[ihash]; 00098 delete [] _data[ihash]; 00099 } 00100 00101 _entries[ihash]++; 00102 00103 _strings[ihash]=newstrings; 00104 _data[ihash]=newdata; 00105 00106 }
T * EvtStringHash< T >::get | ( | const std::string & | str | ) | [inline] |
Definition at line 109 of file EvtStringHash.hh.
References EvtStringHash< T >::_data, EvtStringHash< T >::_entries, EvtStringHash< T >::_strings, EvtStringHash< T >::hash(), and genRecEmupikp::i.
00109 { 00110 00111 int ihash=hash(str); 00112 00113 int i; 00114 00115 for (i=0;i<_entries[ihash];i++){ 00116 if (*(_strings[ihash][i])==str) return _data[ihash][i]; 00117 } 00118 00119 return 0; 00120 00121 00122 }
int EvtStringHash< T >::hash | ( | const std::string & | str | ) | [inline, private] |
Definition at line 126 of file EvtStringHash.hh.
References EvtStringHash< T >::_size, and genRecEmupikp::i.
Referenced by EvtStringHash< T >::add(), and EvtStringHash< T >::get().
00126 { 00127 00128 const char* cstr=str.c_str(); 00129 00130 int i=0; 00131 00132 int value=0; 00133 00134 while(cstr[i]!=0){ 00135 value+=(int)cstr[i]; 00136 i++; 00137 } 00138 00139 return value%_size; 00140 00141 }
T*** EvtStringHash< T >::_data [private] |
Definition at line 26 of file EvtStringHash.hh.
Referenced by EvtStringHash< T >::add(), EvtStringHash< T >::EvtStringHash(), EvtStringHash< T >::get(), and EvtStringHash< T >::~EvtStringHash().
int* EvtStringHash< T >::_entries [private] |
Definition at line 27 of file EvtStringHash.hh.
Referenced by EvtStringHash< T >::add(), EvtStringHash< T >::EvtStringHash(), EvtStringHash< T >::get(), and EvtStringHash< T >::~EvtStringHash().
int EvtStringHash< T >::_size [private] |
Definition at line 23 of file EvtStringHash.hh.
Referenced by EvtStringHash< T >::EvtStringHash(), EvtStringHash< T >::hash(), and EvtStringHash< T >::~EvtStringHash().
std::string*** EvtStringHash< T >::_strings [private] |
Definition at line 25 of file EvtStringHash.hh.
Referenced by EvtStringHash< T >::add(), EvtStringHash< T >::EvtStringHash(), EvtStringHash< T >::get(), and EvtStringHash< T >::~EvtStringHash().