⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cache.cpp

📁 模拟P2P各种网络环境的,适合新手们的学习,不错的源码.
💻 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 + -