EvtStringHash< T > Class Template Reference

#include <EvtStringHash.hh>

List of all members.

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


Detailed Description

template<class T>
class EvtStringHash< T >

Definition at line 13 of file EvtStringHash.hh.


Constructor & Destructor Documentation

template<class T>
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 }

template<class T>
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 }

template<class T>
EvtStringHash< T >::EvtStringHash (  )  [private]


Member Function Documentation

template<class T>
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 }

template<class T>
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 }

template<class T>
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 }


Member Data Documentation

template<class T>
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().

template<class T>
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().

template<class T>
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().

template<class T>
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().


Generated on Tue Nov 29 23:19:25 2016 for BOSS_7.0.2 by  doxygen 1.4.7