Ejemplo n.º 1
0
 void set(int key, int value) {
     if(cacheMap.find(key) == cacheMap.end()){
         if(cacheList.size() == capacity){
             cacheMap.erase(cacheList.back().key);
             cacheList.pop_back();
         }
         cacheList.push_front(CacheNode(key, value));
         cacheMap[key] = cacheList.begin();
     }
     else{
         cacheMap[key]->value = value;
         cacheList.splice(cacheList.begin(), cacheList, cacheMap[key]);
         cacheMap[key] = cacheList.begin();
     }
 }
 // @param key, an integer
 // @param value, an integer
 // @return nothing
 void set(int key, int value) {
     // write your code here
     if(CacheMap.find(key) == CacheMap.end()) {
         if(CacheList.size() == size) {
             CacheMap.erase(CacheList.back().key);
             CacheList.pop_back();
         }
         CacheList.push_front(CacheNode(key, value));
         CacheMap[key] = CacheList.begin();
     } else {
         list<CacheNode>::iterator it = CacheMap[key];
         it->val = value;
         CacheList.splice(CacheList.begin(), CacheList, it);
     }
 }
Ejemplo n.º 3
0
 void set(int key, int value) {
     if (cacheMap.find(key) != cacheMap.end()) {
         auto it = cacheMap[key];
         cacheList.splice(cacheList.begin(), cacheList , it);
         cacheMap[key] = cacheList.begin();
         cacheList.begin()->value = value;
     } else {
         if(cacheList.size() == size) {
             cacheMap.erase(cacheList.back().key);
             cacheList.pop_back();
         }
         cacheList.push_front(CacheNode(key, value));
         cacheMap[key] = cacheList.begin();
     }
 }
Ejemplo n.º 4
0
bool_t NetworkTask::Run()
{
	bool_t ret = FALSE;

	Node *root = static_cast< Node* >(Thread::UserPtr());
	if(!root) { ECILA_TRACE(); return FALSE; }

	CacheNode(root);

	while(!Thread::IsStop())
	{
		demultiplexer_->HandleEvents(0);

		ret = DispatchMsg();
		if(!ret) { ecila_msleep(1); }
	}

	return TRUE;
}												
Ejemplo n.º 5
0
	void set(int key, int value) {
		if (m_cachemap.find(key) == m_cachemap.end())
		{
			// 如果到达最大尺寸,删除链表尾部节点,即访问最少的节点。
			if (m_cachelist.size() == m_capacity)
			{
				m_cachemap.erase(m_cachelist.back().key);
				m_cachelist.pop_back();
			}
			// 插入新节点到链表头部,并且在map中增加该节点。
			m_cachelist.push_front(CacheNode(key, value));
			m_cachemap[key] = m_cachelist.begin();
		}else
		{
			// 更新节点的值,把当前访问的节点移到链表头部,并且更新map中该节点的地址。
			m_cachemap[key]->value = value;
			m_cachelist.splice(m_cachelist.begin(), m_cachelist, m_cachemap[key]);
			m_cachemap[key] = m_cachelist.begin();
		}
	}
Ejemplo n.º 6
0
 void set(int key, int value) {
     if (cacheMap.find(key) == cacheMap.end()) {
         if (cacheList.size() == capacity) {
             // delete end node of the list (least visited node)
             cacheMap.erase(cacheList.back().key);
             cacheList.pop_back();
         }
         // insert new node in teh beginning of the list, update map
         cacheList.push_front(CacheNode(key, value));
         cacheMap[key] = cacheList.begin();
     } else {
         // update node value, move the current visited node to the beginning of the list, update the address of the node
         cacheMap[key]->value = value;
         //cacheList.splice(cacheList.begin(), cacheList, cacheMap[key]);
         CacheNode tmp = *cacheMap[key];
         cacheList.erase(cacheMap[key]);
         cacheList.push_front(tmp);
         cacheMap[key] = cacheList.begin();
     }
 }
Ejemplo n.º 7
0
 void set(int key, int value) {
     if(cacheMap.find(key)==cacheMap.end()){
         //new kv
         if(cacheList.size()==capacity){
             //the list is full delete the tail of the list
             cacheMap.erase(cacheList.back().key);
             cacheList.pop_back();
         }
         //move it to the front
         cacheList.push_front(CacheNode(key,value));
         cacheMap[key]=cacheList.begin();
     }else{
         //old kv 
         cacheMap[key]->value=value;
         //move it to the front
         cacheList.splice(cacheList.begin(),cacheList,cacheMap[key]);
         cacheMap[key]=cacheList.begin();
     }
     
 }