📄 cache.cpp
字号:
#include "Cache.h"
#include "Sysparameter.h"
#include "BTDocument.h"
#include "BT.h"
#include "BTPeer.h"
#include "BTTracker.h"
Cache::Cache(void){
mCacheList = new list<cacheItem>;
mCacheHitNum = 0;
mCacheNum = CACHE_NUM;
mCacheSearchNum = 0;
mAgent = NULL;
}
Cache::Cache( unsigned int num){
mCacheList = new list<cacheItem>;
mCacheHitNum = 0;
mCacheNum = num;
mCacheSearchNum = 0;
mAgent = NULL;
}
Cache::~Cache(void){
delete mCacheList;
}
bool Cache::inCache(string key, unsigned int index){
mCacheSearchNum++;
map<string , docAccessInfo*>::iterator aIt = mDocSearchNum.find( key);
docAccessInfo* docInfo = NULL;
if( aIt == mDocSearchNum.end()){
docInfo = new docAccessInfo;
memset( docInfo, 0, sizeof(docAccessInfo));
docInfo->searchNum++;
mDocSearchNum.insert( map<string, docAccessInfo*>::value_type( key, docInfo));
}else{
docInfo = aIt->second;
docInfo->searchNum ++;
}
list<cacheItem>::iterator pIt = mCacheList->begin();
while( pIt != mCacheList->end() ){
if( (*pIt).mKey == key && (*pIt).pieceindex == index){
mCacheHitNum++;
cacheItem item;
item.mKey = key;
item.pieceindex = index;
mCacheList->erase( pIt);
mCacheList->push_back(item);
aIt = mDocSearchNum.find(key);
aIt->second->hitNum++;
return true;
}
pIt++;
}
cacheItem item;
item.mKey = key;
item.pieceindex = index;
mCacheList->push_back(item);
if( mCacheList->size() > mCacheNum)
mCacheList->pop_front();
return false;
}
float Cache::getCacheHitRatio(void){
return (float)mCacheHitNum/(float)mCacheSearchNum;
}
void Cache::printCacheTotolInfo(void){
printf("peer %d searchnum %d hit num %d outputNum %d output %f M\n", mAgent->getID(), mCacheSearchNum, mCacheHitNum, mCacheSearchNum-mCacheHitNum, (float)mCacheSearchNum*16/1024.0);
}
void Cache::printCache(void){
map<string, docAccessInfo*>::iterator aIt = mDocSearchNum.begin();
while( aIt != mDocSearchNum.end()){
docAccessInfo* docInfo = aIt->second;
printf("peer %d doc %s searchnum %d hitnum %d outputNum %d download num %d netowrk output %fM disk output %fM\n", mAgent->getID(), aIt->first.c_str(), docInfo->searchNum, docInfo->hitNum, docInfo->searchNum - docInfo->hitNum, bt.mTracker->getDocDownloadNum(aIt->first.c_str()), (float)(docInfo->searchNum*16)/(float)1024, (float)((docInfo->searchNum - docInfo->hitNum)*256)/(float)1024);
aIt++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -