00001 00015 #include "CacheBuffer.h" 00016 00017 ClassImp(CacheBuffer) 00018 00019 //_________________________________________________________________________________________ 00020 ostream & operator << (ostream & stream, const CacheBuffer & buffer) 00021 { 00022 map<double, double>::const_iterator cache_iter; 00023 for(cache_iter = buffer.fCache.begin(); cache_iter != buffer.fCache.end(); ++cache_iter) 00024 stream << " E = " << cache_iter->first << " MeV " 00025 << "--> dE/dx = " << cache_iter->second << " MeV cm^2 / gr" << endl; 00026 00027 return stream; 00028 } 00029 //_________________________________________________________________________________________ 00030 CacheBuffer::CacheBuffer() 00031 { 00032 fCacheSize = fCache.size(); 00033 fAutoclearLimit = 1000; 00034 } 00035 //_________________________________________________________________________________________ 00036 CacheBuffer::CacheBuffer(unsigned int autoclear_limit) : 00037 fAutoclearLimit(autoclear_limit) 00038 { 00039 fCacheSize = fCache.size(); 00040 } 00041 //_________________________________________________________________________________________ 00042 CacheBuffer::~CacheBuffer() 00043 { 00044 00045 } 00046 //_________________________________________________________________________________________ 00047 void CacheBuffer::AddToCache(double e, double de_dx) 00048 { 00049 fCacheSize = fCache.size(); 00050 00051 // check cache buffer size, 0 disables auto-clear 00052 if(fCacheSize > fAutoclearLimit && fAutoclearLimit != 0) fCache.clear(); 00053 00054 fCache.insert( map<double, double>::value_type(e, de_dx) ); 00055 } 00056 //_________________________________________________________________________________________ 00057 bool CacheBuffer::Retrieve(double e, double & de_dx) const 00058 { 00059 if( fCache.count(e) == 1) { 00060 map<double, double>::const_iterator iter = fCache.find(e); 00061 de_dx = iter->second; 00062 return true; 00063 } 00064 de_dx = 0; 00065 return false; 00066 } 00067 //_________________________________________________________________________________________ 00068 void CacheBuffer::ClearCache(void) 00069 { 00070 fCache.clear(); 00071 } 00072 //_________________________________________________________________________________________ 00073 void CacheBuffer::Print(const Option_t *) const 00074 { 00075 cout << *this; 00076 } 00077 //_________________________________________________________________________________________ 00078 00079 00080
1.3.9.1