亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cache_manager_t.cpp

?? 一個開源的網絡開發庫ACE
?? CPP
字號:
// Cache_Manager_T.cpp,v 1.4 2000/05/31 19:15:07 jxh Exp

#ifndef JAWS_CACHE_MANAGER_T_CPP
#define JAWS_CACHE_MANAGER_T_CPP

#include "JAWS/Cache_Manager_T.h"
#include "JAWS/Cache_Hash_T.h"
#include "JAWS/Cache_List_T.h"

class Cache_Manager;

template <class KEY, class FACTORY, class HASH_FUNC, class EQ_FUNC>
JAWS_Cache_Manager<KEY,FACTORY,HASH_FUNC,EQ_FUNC>
::JAWS_Cache_Manager (ACE_Allocator *alloc,
                     JAWS_Cache_Object_Factory *cof,
                     size_t hashsize,
                     size_t maxsize,
                     size_t maxobjsize,
                     size_t minobjsize,
                     size_t highwater,
                     size_t lowwater,
                     int timetolive,
                     int counted)
  : allocator_ (alloc),
    factory_ (cof),
    hashsize_ (hashsize),
    maxsize_ (maxsize),
    maxobjsize_ (maxobjsize),
    minobjsize_ (minobjsize),
    highwater_ (highwater),
    lowwater_ (lowwater),
    waterlevel_ (0),
    timetolive_ (timetolive),
    counted_ (counted),
    hash_ (0),
    heap_ (0)
{
  // Some sanity checking needed here --
  if (this->lowwater_ > this->highwater_)
    this->lowwater_ = this->highwater_ / 2;

  if (this->maxobjsize_ > (this->highwater_ - this->lowwater_) * 1024)
    this->maxobjsize_ = (this->highwater_ - this->lowwater_) * (1024/2);

  if (this->minobjsize_ > this->maxobjsize_)
    this->minobjsize_ = this->maxobjsize_ / 2;

  if (this->allocator_ == 0)
    this->allocator_ = ACE_Allocator::instance ();

  if (this->factory_ == 0)
    this->factory_ = Object_Factory::instance ();

  ACE_NEW_MALLOC (this->hash_,
                  (Cache_Hash *)
                  this->allocator_->malloc (sizeof (Cache_Hash)),
                  Cache_Hash (alloc, hashsize));

  if (this->hash_ == 0)
    {
      this->hashsize_ = 0;
      return;
    }

  ACE_NEW_MALLOC (this->heap_,
                  (Cache_Heap *)
                  this->allocator_->malloc (sizeof (Cache_Heap)),
                  Cache_Heap (alloc, maxsize));

  if (this->heap_ == 0)
    {
      this->maxsize_ = 0;


      ACE_DES_FREE_TEMPLATE3(this->hash_, this->allocator_->free,
                             JAWS_Cache_Hash,
                             KEY, HASH_FUNC, EQ_FUNC);



      this->hash_ = 0;
      this->hashsize_ = 0;
    }
}


template <class KEY, class FACTORY, class HASH_FUNC, class EQ_FUNC> int
JAWS_Cache_Manager<KEY,FACTORY,HASH_FUNC,EQ_FUNC>
::open (ACE_Allocator *alloc,
        JAWS_Cache_Object_Factory *cof,
        size_t hashsize,
        size_t maxsize,
        size_t maxobjsize,
        size_t minobjsize,
        size_t highwater,
        size_t lowwater,
        int timetolive,
        int counted)
{
  this->close ();

  this->allocator_ = alloc;
  this->factory_ = cof;
  this->hashsize_ = hashsize;
  this->maxsize_ = maxsize;
  this->maxobjsize_ = maxobjsize;
  this->minobjsize_ = minobjsize;
  this->highwater_ = highwater;
  this->lowwater_ = lowwater;
  this->waterlevel_ = 0;
  this->timetolive_ = timetolive;
  this->counted_ = counted;

  // Some sanity checking needed here --
  if (this->lowwater_ > this->highwater_)
    this->lowwater_ = this->highwater_ / 2;

  if (this->maxobjsize_ > (this->highwater_ - this->lowwater_) * 1024)
    this->maxobjsize_ = (this->highwater_ - this->lowwater_) * (1024/2);

  if (this->minobjsize_ > this->maxobjsize_)
    this->minobjsize_ = this->maxobjsize_ / 2;

  if (this->allocator_ == 0)
    this->allocator_ = ACE_Allocator::instance ();

  if (this->factory_ == 0)
    this->factory_ = Object_Factory::instance ();

  this->hash_ = (Cache_Hash *) this->allocator_->malloc (sizeof (Cache_Hash));
  if (this->hash_ == 0)
    {
      errno = ENOMEM;
      this->hashsize_ = 0;

      return -1;
    }
  new (this->hash_) Cache_Hash (alloc, hashsize);

  this->heap_ = (Cache_Heap *) this->allocator_->malloc (sizeof (Cache_Heap));
  if (this->heap_ == 0)
    {
      errno = ENOMEM;
      this->maxsize_ = 0;


      ACE_DES_FREE_TEMPLATE3(this->hash_, this->allocator_->free,
                             JAWS_Cache_Hash,
                             KEY, HASH_FUNC, EQ_FUNC);



      this->hash_ = 0;
      this->hashsize_ = 0;

      return -1;
    }
  new (this->heap_) Cache_Heap (alloc, maxsize);

  return 0;
}

template <class KEY, class FACTORY, class HASH_FUNC, class EQ_FUNC>
JAWS_Cache_Manager<KEY,FACTORY,HASH_FUNC,EQ_FUNC>::~JAWS_Cache_Manager (void)
{
  this->close ();
}

template <class KEY, class FACTORY, class HASH_FUNC, class EQ_FUNC> int
JAWS_Cache_Manager<KEY,FACTORY,HASH_FUNC,EQ_FUNC>::close (void)
{
  while (this->waterlevel_ > 0)
    this->FLUSH_i ();

  if (this->hash_)
    {

      ACE_DES_FREE_TEMPLATE3(this->hash_, this->allocator_->free,
                             JAWS_Cache_Hash,
                             KEY, HASH_FUNC, EQ_FUNC);



      this->hash_ = 0;
    }

  if (this->heap_)
    {

      ACE_DES_FREE_TEMPLATE4(this->heap_, this->allocator_->free,
                             JAWS_Cache_List,
                             KEY, FACTORY, HASH_FUNC, EQ_FUNC);



      this->heap_ = 0;
    }

  return 0;
}

template <class KEY, class FACTORY, class HASH_FUNC, class EQ_FUNC> int
JAWS_Cache_Manager<KEY,FACTORY,HASH_FUNC,EQ_FUNC>
::GET_i (const KEY &key, JAWS_Cache_Object *&object)
{
  int result = this->hash_->find (key, object);

  if (result == 0)
    this->TAKE (object);
  else
    object = 0;

  return result;
}

template <class KEY, class FACTORY, class HASH_FUNC, class EQ_FUNC> int
JAWS_Cache_Manager<KEY,FACTORY,HASH_FUNC,EQ_FUNC>
::PUT_i (const KEY &key, const void *data, size_t size, JAWS_Cache_Object *&obj)
{
  int result = 0;

  if (data == 0)
    {
      this->FLUSH_i (key);
      obj = 0;
      return 0;
    }

  result = this->MAKE (data, size, obj);
  if (result == -1)
    {
      if (size/1024 <= this->maxobjsize_)
        cerr << "MAKE failed.  Bummer!" << endl;
      else
        this->DROP_i (obj);
      return -1;
    }

  obj->internal (new KEY (key));

  KEY old_key;
  JAWS_Cache_Object *old_obj;

  result = this->hash_->rebind (key, obj, old_key, old_obj);
  if (result == -1)
    {
      cerr << "*** hash bind error: " << key << endl;
      obj->release ();
      this->DROP_i (obj);
      return -1;
    }
  else if (result == 1)
    {
      this->heap_->remove (old_obj->heap_item ());
      this->waterlevel_ -= old_obj->size ();
      old_obj->release ();
      this->DROP_i (old_obj);
    }

  result = this->heap_->insert (key, obj);
  if (result == -1)
    {
      cerr << "*** heap insertion error: " << key << endl;
      this->hash_->unbind (key);
      obj->release ();
      this->DROP_i (obj);
      return -1;
    }

  this->waterlevel_ += size;

  // Acquire this one for the putter.
  this->TAKE (obj);

  return 0;
}

template <class KEY, class FACTORY, class HASH_FUNC, class EQ_FUNC> int
JAWS_Cache_Manager<KEY,FACTORY,HASH_FUNC,EQ_FUNC>
::FLUSH_i (const KEY &key)
{
  JAWS_Cache_Object *temp_object;

#ifdef ENTERA_VERBOSE_TRACE
  cerr << "*** flush key unbinding: " << key << endl;
#endif
  int result = this->hash_->unbind (key, temp_object);
  if (result == 0)
    {
      this->waterlevel_ -= temp_object->size ();
      if (this->heap_->remove (temp_object->heap_item ()) == -1)
        cerr << "*** flush key heap remove failed: " << endl;
      temp_object->release ();
      this->DROP_i (temp_object);
    }
  else
    cerr << "*** flush key hash unbind failed: " << key << endl;

  return result;
}

template <class KEY, class FACTORY, class HASH_FUNC, class EQ_FUNC> int
JAWS_Cache_Manager<KEY,FACTORY,HASH_FUNC,EQ_FUNC>
::FLUSH_i (void)
{
  KEY temp_key;
  JAWS_Cache_Object *temp_object;

  int result = this->heap_->remove (temp_key, temp_object);
  if (result == 0)
    {
#ifdef ENTERA_VERBOSE_TRACE
      cerr << "*** flush unbinding: " << temp_key << endl;
#endif
      result = this->hash_->unbind (temp_key);
      if (result == -1)
        cerr << "*** flush hash unbind failed: " << temp_key << endl;
      result = 0;
      this->waterlevel_ -= temp_object->size ();
      temp_object->release ();
      this->DROP_i (temp_object);
    }
  else
    {
      cerr << "*** flush heap remove failed" << endl;
    }

  return result;
}

template <class KEY, class FACTORY, class HASH_FUNC, class EQ_FUNC> int
JAWS_Cache_Manager<KEY,FACTORY,HASH_FUNC,EQ_FUNC>
::DROP_i (JAWS_Cache_Object *&obj)
{
  int result = 0;

  if (obj->count () == 0)
    {
      KEY *key = (KEY *) obj->internal ();
      this->factory_->destroy (obj);
      delete key;
      obj = 0;
      result = 1;
    }
  else
    result = this->heap_->adjust (obj->heap_item ());

  return result;
}

template <class KEY, class FACTORY, class HASH_FUNC, class EQ_FUNC> int
JAWS_Cache_Manager<KEY,FACTORY,HASH_FUNC,EQ_FUNC>
::GET (const KEY &key, JAWS_Cache_Object *&object)
{
  ACE_Read_Guard<ACE_SYNCH_RW_MUTEX> g (this->lock_);

  return this->GET_i (key, object);
}

template <class KEY, class FACTORY, class HASH_FUNC, class EQ_FUNC> int
JAWS_Cache_Manager<KEY,FACTORY,HASH_FUNC,EQ_FUNC>
::PUT (const KEY &key, const void *data, size_t size, JAWS_Cache_Object *&obj)
{
  ACE_Write_Guard<ACE_SYNCH_RW_MUTEX> g (this->lock_);

  return this->PUT_i (key, data, size, obj);
}

template <class KEY, class FACTORY, class HASH_FUNC, class EQ_FUNC> int
JAWS_Cache_Manager<KEY,FACTORY,HASH_FUNC,EQ_FUNC>
::MAKE (const void *data, size_t size, JAWS_Cache_Object *&obj)
{
  // verify object is within cacheable range
  if (size/1024 > this->maxobjsize_)
    {
#if 0
      // What we do is cache it anyway, but remove it as soon as the
      // requester returns it.
      obj = this->factory_->create (data, size);
      return 0;
#else
      // The above is a little tricky to implement.  Think about it
      // some more.
      obj = this->factory_->create (data, size);
      return -1;

#endif /* 0 */
    }

  if (size/1024 < this->minobjsize_)

    {
      // Don't bother to cache this.
      cerr << "*** " << size << " is too small to cache" << endl;
      return -1;
    }

  // make sure we have sufficient memory
  if (this->waterlevel_ + size > this->highwater_ * (1024 * 1024))
    {
      do
        {
          if (this->FLUSH_i () == -1)
            {
              cerr << "*** cache flooded, flush error" << endl;
              return -1;
            }
        }
      while (this->waterlevel_ > this->lowwater_ * (1024 * 1024));
    }

  // make sure heap has enough room
  if (this->heap_->is_full ())
    {
      cerr << "*** heap full, flushing" << endl;
      if (this->FLUSH_i () == -1)
        {
          cerr << "*** heap full, flush error" << endl;
          return -1;
        }
    }

  obj = this->factory_->create (data, size);
  if (this->TAKE (obj) == -1)
    {
      cerr << "*** take error" << endl;
      this->factory_->destroy (obj);
      obj = 0;
      return -1;
    }

  return 0;
}

template <class KEY, class FACTORY, class HASH_FUNC, class EQ_FUNC> int
JAWS_Cache_Manager<KEY,FACTORY,HASH_FUNC,EQ_FUNC>
::TAKE (JAWS_Cache_Object *const &obj)
{
  if (obj == 0)
    return -1;

  return obj->acquire ();
}

template <class KEY, class FACTORY, class HASH_FUNC, class EQ_FUNC> int
JAWS_Cache_Manager<KEY,FACTORY,HASH_FUNC,EQ_FUNC>
::DROP (JAWS_Cache_Object *&obj)
{
  if (obj == 0)
    return -1;

#if 0
  if (obj->size ()/1024 > this->maxobjsize_)
    {
      ACE_Write_Guard<ACE_SYNCH_RW_MUTEX> g (this->lock_);

      int result = obj->release ();
      if (result == 0)
        {
          if (obj->count () == 0)
            {
              KEY *key = (KEY *) obj->internal ();
#ifdef ENTERA_VERBOSE_TRACE
              cerr << "*** drop large unbinding: " << key << endl;
#endif
              result = this->hash_->unbind (*key);
              if (result == 0)
                {
                  if (this->heap_->remove (obj->heap_item ()) == -1)
                    cerr << "*** drop large heap remove failed: " << endl;
                  this->factory_->destroy (obj);
                  delete key;
                  obj = 0;
                  result = 1;
                }
              else
                cerr << "*** drop large hash unbind failed: " << key << endl;
            }
        }
      return result;
    }
#endif /* 0 */

  {
    ACE_Write_Guard<ACE_SYNCH_RW_MUTEX> g (this->lock_);

    int result = obj->release ();

    if (result == 0)
      {
        if (obj->count () == 0)
          {
            KEY *key = (KEY *) obj->internal ();
            this->factory_->destroy (obj);
            delete key;
            obj = 0;
            result = 1;
          }
        else
          {
            result = this->DROP_i (obj);
          }
      }

    return result;
  }
}

template <class KEY, class FACTORY, class HASH_FUNC, class EQ_FUNC> int
JAWS_Cache_Manager<KEY,FACTORY,HASH_FUNC,EQ_FUNC>
::FLUSH (void)
{
  ACE_Write_Guard<ACE_SYNCH_RW_MUTEX> g (this->lock_);

  return this->FLUSH_i ();
}


template <class KEY, class DATA, class CACHE_MANAGER>
JAWS_Cache_Proxy<KEY, DATA, CACHE_MANAGER>
::JAWS_Cache_Proxy (const KEY &key, Cache_Manager *manager)
  : object_ (0),
    manager_ (manager)
{
  if (this->manager_ == 0)
    this->manager_ = Cache_Manager_Singleton::instance ();

  int result = this->manager_->GET (key, this->object_);
  if (result == -1)
    this->object_ = 0;
}

template <class KEY, class DATA, class CACHE_MANAGER>
JAWS_Cache_Proxy<KEY, DATA, CACHE_MANAGER>
::JAWS_Cache_Proxy (const KEY &key, DATA *data, size_t size,
                   Cache_Manager *manager)
  : object_ (0),
    manager_ (manager)
{
  if (this->manager_ == 0)
    this->manager_ = Cache_Manager_Singleton::instance ();

  int result = this->manager_->PUT (key, data, size, this->object_);
  if (result == -1)
    this->object_ = 0;
}

template <class KEY, class DATA, class CACHE_MANAGER>
JAWS_Cache_Proxy<KEY, DATA, CACHE_MANAGER>::~JAWS_Cache_Proxy (void)
{
  DATA *data = this->data ();
  this->manager_->DROP (this->object_);
  if (this->object_ == 0)
    this->close (data);
}

template <class KEY, class DATA, class CACHE_MANAGER> DATA *
JAWS_Cache_Proxy<KEY, DATA, CACHE_MANAGER>::data (void) const
{
  return this->object_ ? (DATA *) this->object_->data () : 0;
}

template <class KEY, class DATA, class CACHE_MANAGER>
JAWS_Cache_Proxy<KEY, DATA, CACHE_MANAGER>::operator DATA * (void) const
{
  return this->data ();
}

template <class KEY, class DATA, class CACHE_MANAGER> int
JAWS_Cache_Proxy<KEY, DATA, CACHE_MANAGER>::close (DATA *)
{
  return 0;
}


#endif /* JAWS_CACHE_MANAGER_T_CPP */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆精品国产| 99re热视频精品| 欧美一区二区免费视频| 一区二区成人在线视频 | 精品亚洲成av人在线观看| 日韩三级.com| 国产激情视频一区二区在线观看| 久久蜜桃一区二区| 国产伦精品一区二区三区免费| 久久综合九色综合97婷婷女人| 精品亚洲成a人| 中文字幕免费在线观看视频一区| 成人av免费网站| 亚洲制服丝袜av| 91精品在线一区二区| 国产毛片精品国产一区二区三区| 国产欧美精品国产国产专区| eeuss影院一区二区三区| 亚洲一区二区三区四区的| 91精品视频网| 国产精品99久久久久| 国产精品美女久久久久久| 欧美在线观看你懂的| 久久精品国产秦先生| 欧美国产日韩a欧美在线观看| 97成人超碰视| 日韩va欧美va亚洲va久久| 精品久久久久久久人人人人传媒| 国产成人免费av在线| 亚洲综合清纯丝袜自拍| 精品欧美一区二区三区精品久久| 波多野结衣欧美| 天天色图综合网| 久久久精品tv| 欧美日韩免费电影| 国产成a人亚洲| 国产不卡在线视频| 视频一区欧美精品| 国产精品久久久久久久久动漫 | 亚洲视频在线一区二区| 欧美精品成人一区二区三区四区| 国产激情一区二区三区四区 | 中文字幕一区av| 精品日产卡一卡二卡麻豆| 91麻豆自制传媒国产之光| 久久精品av麻豆的观看方式| 亚洲精品国产a久久久久久| www久久久久| 6080日韩午夜伦伦午夜伦| 99久久婷婷国产| 黑人巨大精品欧美黑白配亚洲| 一区二区三区精品久久久| 精品国产不卡一区二区三区| 欧美图区在线视频| 99久久国产综合色|国产精品| 国内国产精品久久| 美日韩一区二区| 五月激情丁香一区二区三区| 亚洲黄色在线视频| 国产精品护士白丝一区av| 久久一二三国产| 欧美一区二区高清| 欧美人妖巨大在线| 在线观看免费一区| 一本色道久久综合狠狠躁的推荐| 国产美女娇喘av呻吟久久| 蜜臀a∨国产成人精品| 亚洲成a人在线观看| 怡红院av一区二区三区| 国产精品进线69影院| 中国色在线观看另类| 中文字幕国产一区| 久久久久国产精品人| 三级精品在线观看| 亚洲国产综合人成综合网站| 亚洲视频一区二区在线观看| 欧美激情一区二区三区全黄| 久久免费电影网| 久久精品视频一区二区三区| www精品美女久久久tv| 久久这里只有精品6| 2021久久国产精品不只是精品| 日韩欧美电影一二三| 日韩精品一区国产麻豆| 日韩欧美专区在线| 欧美成人一区二区三区片免费 | 久久夜色精品一区| 国产午夜亚洲精品不卡| 久久久久久毛片| 中文字幕av一区二区三区高| 国产欧美日韩精品一区| 自拍偷拍国产精品| 亚洲精品一卡二卡| 午夜影院在线观看欧美| 青青国产91久久久久久 | 国产福利电影一区二区三区| 国产剧情一区二区| av在线这里只有精品| 在线一区二区三区四区| 欧美精品国产精品| 久久这里都是精品| 亚洲免费观看在线视频| 天天做天天摸天天爽国产一区| 久久激情综合网| 成人三级伦理片| 欧美影视一区在线| 欧美xxx久久| 中文字幕乱码日本亚洲一区二区| 综合久久国产九一剧情麻豆| 亚洲大片在线观看| 国产一区欧美一区| 色偷偷一区二区三区| 538prom精品视频线放| 久久久久久免费网| 亚洲制服丝袜在线| 国产精品1区2区| 欧美色综合影院| 久久免费电影网| 亚洲福利视频一区二区| 国产精品888| 欧美日韩第一区日日骚| 国产午夜亚洲精品羞羞网站| 亚洲精品日日夜夜| 国产一区二区影院| 欧美日韩国产精选| 久久久国产精品午夜一区ai换脸 | 亚洲一区免费视频| 国产一区二区影院| 欧美军同video69gay| 国产精品久久久久毛片软件| 青青草成人在线观看| 99精品欧美一区二区三区小说| 91麻豆精品国产91| 一区二区三区在线观看网站| 精品一区二区久久久| 欧美午夜精品一区二区三区| 欧美精品一区二区三区视频| 福利一区二区在线| 日韩午夜激情免费电影| 亚洲一区二区综合| 成人一级黄色片| 日韩精品一区二区三区蜜臀| 亚洲va天堂va国产va久| 91美女片黄在线观看| 国产日韩欧美麻豆| 韩国欧美国产1区| 欧美精品在欧美一区二区少妇| 国产精品久久久久久久久动漫| 国内精品免费**视频| 91精品国产aⅴ一区二区| 亚洲日本电影在线| 成人免费高清在线| 国产欧美精品一区| 国产精品1区二区.| 久久男人中文字幕资源站| 美日韩一区二区| 日韩美女天天操| 免费观看在线综合| 777午夜精品视频在线播放| 亚洲成人精品在线观看| 91视频免费看| 亚洲欧美一区二区三区孕妇| 成人小视频在线| 国产欧美精品一区| av在线综合网| **欧美大码日韩| 92精品国产成人观看免费| 1024国产精品| 色丁香久综合在线久综合在线观看| 国产精品美女久久久久久久网站| 懂色av一区二区三区免费观看| 久久精品一区四区| 丰满白嫩尤物一区二区| 欧美国产在线观看| 99久久99久久综合| 一区二区三区蜜桃| 欧美日韩国产在线播放网站| 亚洲18女电影在线观看| 91精品免费在线| 精品一区二区在线观看| 久久久久国产成人精品亚洲午夜| 国产盗摄女厕一区二区三区| 国产精品久久看| 欧美最新大片在线看| 婷婷六月综合网| 精品美女在线播放| 国产成人午夜高潮毛片| 1024国产精品| 欧美一区二区三区播放老司机| 久久99精品国产麻豆不卡| 国产欧美日韩精品在线| 91碰在线视频| 蜜臀av一区二区在线观看| 国产视频一区在线观看| 97超碰欧美中文字幕| 天天操天天干天天综合网| 欧美精品一区二区三| 不卡一区二区在线| 日韩精品一区第一页| 久久只精品国产|