#ifndef Cache_h #define Cache_h #include #include /* content of each cache element */ class CacheElem { public: unsigned addr, info; }; /* Cache module */ class Cache{ public: /* constructor: take cache length and cache-management function*/ Cache(unsigned cacheSize_, unsigned CacheAccess_(Cache*, unsigned addr)); /* Read a cache element. Update info. Number of accesses is incremented. */ struct CacheElem CacheRead(unsigned index, unsigned info); struct CacheElem CacheRead(unsigned index); /* Write a cache element. Counted as a cache miss*/ void CacheWrite(unsigned index, unsigned addr, unsigned info); /* Exchanging content between two cache elements. No cost. */ void CacheMove(unsigned index1, unsigned index2); /* Entry point to Cache */ void DataAccess(unsigned addr); /* Generate a summary report */ void Report(); /* Get the number of processed data accesses */ unsigned GetNumAccesses() {return curTime;} /* Get the size of cache */ unsigned GetSize() {return cacheSize;} /* destructor*/ ~Cache(); private: /* cache storage*/ CacheElem *cache; unsigned cacheSize; /* the number of processed accesses */ unsigned curTime; /* counter of cache accesses and misses*/ unsigned numCacheAccess, numCacheMiss; /* function pointer to cache searching function*/ unsigned (*CacheAccess)(Cache*, unsigned); }; #endif