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

EvtStringHash< T > Class Template Reference

#include <EvtStringHash.hh>

List of all members.

Public Member Functions

void add (const std::string &str, T *data)
 EvtStringHash (int size)
T * get (const std::string &str)
 ~EvtStringHash ()

Private Member Functions

 EvtStringHash ()
int hash (const std::string &str)

Private Attributes

T *** _data
int * _entries
int _size
std::string *** _strings

template<class T>
class EvtStringHash< T >


Constructor & Destructor Documentation

template<class T>
EvtStringHash< T >::EvtStringHash int  size  )  [inline]
 

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]
 

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]
 

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]
 

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]
 

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]
 

template<class T>
int* EvtStringHash< T >::_entries [private]
 

template<class T>
int EvtStringHash< T >::_size [private]
 

template<class T>
std::string*** EvtStringHash< T >::_strings [private]
 


The documentation for this class was generated from the following file:
Generated on Wed Feb 2 16:11:07 2011 for BOSS6.5.5 by  doxygen 1.3.9.1