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

📄 cache_list_t.cpp

📁 ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework)
💻 CPP
字号:
// Cache_List_T.cpp,v 1.3 2005/08/09 11:06:18 jwillemsen Exp#ifndef JAWS_CACHE_LIST_T_CPP#define JAWS_CACHE_LIST_T_CPP#include "JAWS/Cache_List_T.h"#include "JAWS/Cache_Manager_T.h"template <class EXT_ID, class FACT, class H_FN, class E_FN>JAWS_Cache_List<EXT_ID,FACT,H_FN,E_FN>::JAWS_Cache_List (ACE_Allocator *alloc,                                                       size_t maxsize)  : allocator_ (alloc),    maxsize_ (maxsize),    size_ (0),    head_ (0),    tail_ (0){  if (this->allocator_ == 0)    this->allocator_ = ACE_Allocator::instance ();}template <class EXT_ID, class FACT, class H_FN, class E_FN>JAWS_Cache_List<EXT_ID,FACT,H_FN,E_FN>::~JAWS_Cache_List (void){  while (this->head_ != 0)    this->remove (this->head_);  this->allocator_ = 0;}template <class EXT_ID, class FACT, class H_FN, class E_FN> intJAWS_Cache_List<EXT_ID,FACT,H_FN,E_FN>::is_empty (void) const{  return (this->size_ == 0);}template <class EXT_ID, class FACT, class H_FN, class E_FN> intJAWS_Cache_List<EXT_ID,FACT,H_FN,E_FN>::is_full (void) const{  return (this->size_ == this->maxsize_);}template <class EXT_ID, class FACT, class H_FN, class E_FN> size_tJAWS_Cache_List<EXT_ID,FACT,H_FN,E_FN>::size (void) const{  return this->size_;}template <class EXT_ID, class FACT, class H_FN, class E_FN> size_tJAWS_Cache_List<EXT_ID,FACT,H_FN,E_FN>::maxsize (void) const{  return this->maxsize_;}template <class EXT_ID, class FACT, class H_FN, class E_FN> intJAWS_Cache_List<EXT_ID,FACT,H_FN,E_FN>::maxsize (Cache_Manager *,                                                size_t new_maxsize){  this->maxsize_ = new_maxsize;  return 0;}template <class EXT_ID, class FACT, class H_FN, class E_FN> voidJAWS_Cache_List<EXT_ID,FACT,H_FN,E_FN>::insert_i (Cache_List_Item *item){  /* ASSERT: this->size_ < this->maxsize_ */  item->next_ = 0;  item->prev_ = 0;  if (this->size_++ == 0)    this->head_ = this->tail_ = item;  else    {      this->tail_->next_ = item;      item->prev_ = this->tail_;      this->tail_ = item;    }}template <class EXT_ID, class FACT, class H_FN, class E_FN> intJAWS_Cache_List<EXT_ID,FACT,H_FN,E_FN>::insert (const EXT_ID &ext_id,                                               JAWS_Cache_Object *const &int_id){  if (this->is_full ())    return -1;  Cache_List_Item *item = 0;  ACE_NEW_MALLOC_RETURN (item,                         (Cache_List_Item *)                         this->allocator_->malloc (sizeof (Cache_List_Item)),                         Cache_List_Item (ext_id, int_id), -1);  this->insert_i (item);  return 0;}template <class EXT_ID, class FACT, class H_FN, class E_FN> voidJAWS_Cache_List<EXT_ID,FACT,H_FN,E_FN>::remove_i (void){  /* ASSERT: this->size_ > 0 */  this->size_--;  this->item_ = this->head_;  if (this->head_ == this->tail_)    {      this->head_ = this->tail_ = 0;      return;    }  this->head_ = this->head_->next_;  this->head_->prev_ = 0;  this->item_->next_ = 0;}template <class EXT_ID, class FACT, class H_FN, class E_FN> voidJAWS_Cache_List<EXT_ID,FACT,H_FN,E_FN>::remove_i (Cache_List_Item *item){  this->size_--;  this->item_ = item;  if (item->next_ == 0 && item->prev_ == 0)    {      this->head_ = this->tail_ = 0;    }  else if (item->next_ == 0)    {      this->tail_ = item->prev_;      this->tail_->next_ = 0;    }  else if (item->prev_ == 0)    {      this->head_ = item->next_;      this->head_->prev_ = 0;    }  else    {      item->next_->prev_ = item->prev_;      item->prev_->next_ = item->next_;    }  item->next_ = 0;  item->prev_ = 0;}template <class EXT_ID, class FACT, class H_FN, class E_FN> intJAWS_Cache_List<EXT_ID,FACT,H_FN,E_FN>::remove (EXT_ID &ext_id,                                               JAWS_Cache_Object *&int_id){  if (this->is_empty ())    return -1;  this->remove_i ();  ext_id = this->item_->ext_id_;  int_id = this->item_->int_id_;  int_id->heap_item (0);  ACE_DES_FREE_TEMPLATE4(this->item_, this->allocator_->free,                         JAWS_Cache_List_Item,                         EXT_ID, FACT, H_FN, E_FN);  this->item_ = 0;  return 0;}template <class EXT_ID, class FACT, class H_FN, class E_FN> intJAWS_Cache_List<EXT_ID,FACT,H_FN,E_FN>::remove (void *item){  if (item == 0)    return 0;  this->remove_i ((Cache_List_Item *) item);  this->item_->int_id_->heap_item (0);  ACE_DES_FREE_TEMPLATE4(this->item_, this->allocator_->free,                         JAWS_Cache_List_Item,                         EXT_ID, FACT, H_FN, E_FN);  this->item_ = 0;  return 0;}template <class EXT_ID, class FACT, class H_FN, class E_FN> intJAWS_Cache_List<EXT_ID,FACT,H_FN,E_FN>::adjust (void *item){  if (item == 0)    return 0;  Cache_List_Item *real_item = (Cache_List_Item *) item;  this->remove_i (real_item);  this->insert_i (real_item);  this->item_ = 0;  return 0;}template <class EXT_ID, class FACT, class H_FN, class E_FN>JAWS_Cache_List_Item<EXT_ID,FACT,H_FN,E_FN>::JAWS_Cache_List_Item (const EXT_ID &ext_id, JAWS_Cache_Object *const &int_id)  : ext_id_ (ext_id),    int_id_ (int_id){  this->int_id_->heap_item (this);}template <class EXT_ID, class FACT, class H_FN, class E_FN> unsigned intJAWS_Cache_List_Item<EXT_ID,FACT,H_FN,E_FN>::priority (void){  return this->int_id_->priority ();}#endif /* JAWS_CACHE_LIST_T_CPP */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -