AbstractReplacementPolicy.hh revision 6145
19888Sandreas@sandberg.pp.se 29888Sandreas@sandberg.pp.se#ifndef ABSTRACTREPLACEMENTPOLICY_H 39888Sandreas@sandberg.pp.se#define ABSTRACTREPLACEMENTPOLICY_H 49888Sandreas@sandberg.pp.se 59888Sandreas@sandberg.pp.se#include "Global.hh" 69888Sandreas@sandberg.pp.se 79888Sandreas@sandberg.pp.seclass AbstractReplacementPolicy { 89888Sandreas@sandberg.pp.se 99888Sandreas@sandberg.pp.sepublic: 109888Sandreas@sandberg.pp.se 119888Sandreas@sandberg.pp.se AbstractReplacementPolicy(Index num_sets, Index assoc); 129888Sandreas@sandberg.pp.se virtual ~AbstractReplacementPolicy(); 139888Sandreas@sandberg.pp.se 149888Sandreas@sandberg.pp.se /* touch a block. a.k.a. update timestamp */ 159888Sandreas@sandberg.pp.se virtual void touch(Index set, Index way, Time time) = 0; 169888Sandreas@sandberg.pp.se 179888Sandreas@sandberg.pp.se /* returns the way to replace */ 189888Sandreas@sandberg.pp.se virtual Index getVictim(Index set) const = 0; 199888Sandreas@sandberg.pp.se 209888Sandreas@sandberg.pp.se /* get the time of the last access */ 219888Sandreas@sandberg.pp.se Time getLastAccess(Index set, Index way); 229888Sandreas@sandberg.pp.se 239888Sandreas@sandberg.pp.se protected: 249888Sandreas@sandberg.pp.se unsigned int m_num_sets; /** total number of sets */ 259888Sandreas@sandberg.pp.se unsigned int m_assoc; /** set associativity */ 269888Sandreas@sandberg.pp.se Time **m_last_ref_ptr; /** timestamp of last reference */ 279888Sandreas@sandberg.pp.se}; 289888Sandreas@sandberg.pp.se 299888Sandreas@sandberg.pp.seinline 309888Sandreas@sandberg.pp.seAbstractReplacementPolicy::AbstractReplacementPolicy(Index num_sets, Index assoc) 319888Sandreas@sandberg.pp.se{ 329888Sandreas@sandberg.pp.se m_num_sets = num_sets; 339888Sandreas@sandberg.pp.se m_assoc = assoc; 349888Sandreas@sandberg.pp.se m_last_ref_ptr = new Time*[m_num_sets]; 359888Sandreas@sandberg.pp.se for(unsigned int i = 0; i < m_num_sets; i++){ 369888Sandreas@sandberg.pp.se m_last_ref_ptr[i] = new Time[m_assoc]; 379888Sandreas@sandberg.pp.se for(unsigned int j = 0; j < m_assoc; j++){ 389888Sandreas@sandberg.pp.se m_last_ref_ptr[i][j] = 0; 399888Sandreas@sandberg.pp.se } 409888Sandreas@sandberg.pp.se } 419888Sandreas@sandberg.pp.se} 429888Sandreas@sandberg.pp.se 439888Sandreas@sandberg.pp.seinline 449888Sandreas@sandberg.pp.seAbstractReplacementPolicy::~AbstractReplacementPolicy() 459888Sandreas@sandberg.pp.se{ 469888Sandreas@sandberg.pp.se if(m_last_ref_ptr != NULL){ 479888Sandreas@sandberg.pp.se for(unsigned int i = 0; i < m_num_sets; i++){ 489888Sandreas@sandberg.pp.se if(m_last_ref_ptr[i] != NULL){ 499888Sandreas@sandberg.pp.se delete[] m_last_ref_ptr[i]; 509888Sandreas@sandberg.pp.se } 519888Sandreas@sandberg.pp.se } 529888Sandreas@sandberg.pp.se delete[] m_last_ref_ptr; 539888Sandreas@sandberg.pp.se } 549888Sandreas@sandberg.pp.se} 559888Sandreas@sandberg.pp.se 569888Sandreas@sandberg.pp.seinline 579888Sandreas@sandberg.pp.seTime AbstractReplacementPolicy::getLastAccess(Index set, Index way) 589888Sandreas@sandberg.pp.se{ 599888Sandreas@sandberg.pp.se return m_last_ref_ptr[set][way]; 609888Sandreas@sandberg.pp.se} 619888Sandreas@sandberg.pp.se 629888Sandreas@sandberg.pp.se#endif // ABSTRACTREPLACEMENTPOLICY_H 639888Sandreas@sandberg.pp.se