BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtStringHash< T > Class Template Reference

#include <EvtStringHash.hh>

Public Member Functions

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

Detailed Description

template<class T>
class EvtStringHash< T >

Definition at line 11 of file EvtStringHash.hh.

Constructor & Destructor Documentation

◆ EvtStringHash()

template<class T>
EvtStringHash< T >::EvtStringHash ( int size)
inline

Definition at line 28 of file EvtStringHash.hh.

28 {
29
30 _size = size;
31
33 typedef T** TPtrPtr;
34
35 _strings = new EvtStringPtrPtr[_size];
36 _data = new TPtrPtr[_size];
37 _entries = new int[_size];
38
39 int i;
40
41 for ( i = 0; i < _size; i++ ) { _entries[i] = 0; }
42}

◆ ~EvtStringHash()

template<class T>
EvtStringHash< T >::~EvtStringHash ( )
inline

Definition at line 44 of file EvtStringHash.hh.

44 {
45
46 int i;
47 for ( i = 0; i < _size; i++ )
48 {
49 int j;
50 for ( j = 0; j < _entries[i]; j++ ) { delete _strings[i][j]; }
51 if ( _entries[i] > 0 )
52 {
53 delete[] _strings[i];
54 delete[] _data[i];
55 }
56 }
57
58 delete[] _strings;
59 delete[] _data;
60 delete[] _entries;
61}

Member Function Documentation

◆ add()

template<class T>
void EvtStringHash< T >::add ( const std::string & str,
T * data )
inline

Definition at line 63 of file EvtStringHash.hh.

63 {
64
65 int ihash = hash( str );
66
68 typedef T* TPtr;
69
70 std::string** newstrings = new EvtStringPtr[_entries[ihash] + 1];
71 T** newdata = new TPtr[_entries[ihash] + 1];
72
73 int i;
74
75 for ( i = 0; i < _entries[ihash]; i++ )
76 {
77 newstrings[i] = _strings[ihash][i];
78 newdata[i] = _data[ihash][i];
79 }
80
81 newstrings[_entries[ihash]] = new std::string;
82 *( newstrings[_entries[ihash]] ) = str;
83 newdata[_entries[ihash]] = data;
84
85 if ( _entries[ihash] != 0 )
86 {
87 delete[] _strings[ihash];
88 delete[] _data[ihash];
89 }
90
91 _entries[ihash]++;
92
93 _strings[ihash] = newstrings;
94 _data[ihash] = newdata;
95}

◆ get()

template<class T>
T * EvtStringHash< T >::get ( const std::string & str)
inline

Definition at line 97 of file EvtStringHash.hh.

97 {
98
99 int ihash = hash( str );
100
101 int i;
102
103 for ( i = 0; i < _entries[ihash]; i++ )
104 {
105 if ( *( _strings[ihash][i] ) == str ) return _data[ihash][i];
106 }
107
108 return 0;
109}

The documentation for this class was generated from the following file: