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

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

?? hashmap.cc

?? Click is a modular router toolkit. To use it you ll need to know how to compile and install the sof
?? CC
?? 第 1 頁 / 共 2 頁
字號:
/* * hashmap.{cc,hh} -- a hash table template * Eddie Kohler * * Copyright (c) 2000 Mazu Networks, Inc. * Copyright (c) 2003 International Computer Science Institute * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, subject to the conditions * listed in the Click LICENSE file. These conditions include: you must * preserve this copyright notice, and you cannot mention the copyright * holders in advertising related to the Software without their permission. * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This * notice is a summary of the Click LICENSE file; the license in that file is * legally binding. */#ifndef CLICK_HASHMAP_CC#define CLICK_HASHMAP_CC#include <click/hashmap.hh>#include <click/bighashmap_arena.hh>#include <click/glue.hh>CLICK_DECLS#define BIGHASHMAP_REARRANGE_ON_FIND 0template <class K, class V>voidHashMap<K, V>::initialize(HashMap_ArenaFactory *factory, size_t initial_nbuckets){  _nbuckets = initial_nbuckets;  _buckets = (Elt **) CLICK_LALLOC(_nbuckets * sizeof(Elt *));  for (size_t i = 0; i < _nbuckets; i++)    _buckets[i] = 0;  set_dynamic_resizing(true);  _n = 0;  set_arena(factory);}template <class K, class V>HashMap<K, V>::HashMap()  : _default_value(), _arena(0){  initialize(0, DEFAULT_INITIAL_NBUCKETS);}template <class K, class V>HashMap<K, V>::HashMap(const V &def, HashMap_ArenaFactory *factory)  : _default_value(def), _arena(0){  initialize(factory, DEFAULT_INITIAL_NBUCKETS);}template <class K, class V>voidHashMap<K, V>::copy_from(const HashMap<K, V> &o)  // requires that 'this' is empty and has the same number of buckets as 'o'  // and the same resize policy{  for (size_t i = 0; i < _nbuckets; i++) {    Elt **pprev = &_buckets[i];    *pprev = 0;    for (const Elt *e = o._buckets[i]; e; e = e->next) {      Elt *ee = reinterpret_cast<Elt *>(_arena->alloc());      new(reinterpret_cast<void *>(&ee->key)) K(e->key);      new(reinterpret_cast<void *>(&ee->value)) V(e->value);      ee->next = 0;      *pprev = ee;      pprev = &ee->next;    }  }  _n = o._n;}template <class K, class V>HashMap<K, V>::HashMap(const HashMap<K, V> &o)    : _buckets((Elt **) CLICK_LALLOC(o._nbuckets * sizeof(Elt *))),      _nbuckets(o._nbuckets), _default_value(o._default_value),      _capacity(o._capacity), _arena(o._arena){  _arena->use();  copy_from(o);}template <class K, class V>HashMap<K, V> &HashMap<K, V>::operator=(const HashMap<K, V> &o){  if (&o != this) {    clear();    _default_value = o._default_value;    if (_nbuckets < o._nbuckets)      resize0(o._nbuckets);    _nbuckets = o._nbuckets;    _capacity = o._capacity;    copy_from(o);  }  return *this;}template <class K, class V>HashMap<K, V>::~HashMap(){  for (size_t i = 0; i < _nbuckets; i++)    for (Elt *e = _buckets[i]; e; ) {      Elt *next = e->next;      e->key.~K();      e->value.~V();      _arena->free(e);      e = next;    }  CLICK_LFREE(_buckets, _nbuckets * sizeof(Elt *));  _arena->unuse();}template <class K, class V>voidHashMap<K, V>::set_dynamic_resizing(bool on){  if (!on)    _capacity = 0x7FFFFFFF;  else if (_nbuckets >= MAX_NBUCKETS)    _capacity = 0x7FFFFFFE;  else    _capacity = DEFAULT_RESIZE_THRESHOLD * _nbuckets;}template <class K, class V>voidHashMap<K, V>::set_arena(HashMap_ArenaFactory *factory){  assert(empty());  if (_arena)    _arena->unuse();  _arena = HashMap_ArenaFactory::get_arena(sizeof(Elt), factory);  _arena->use();}template <class K, class V>inline size_tHashMap<K, V>::bucket(const K &key) const{  return ((size_t) hashcode(key)) % _nbuckets;}template <class K, class V>typename HashMap<K, V>::Pair *HashMap<K, V>::find_pair(const K &key) const{#if BIGHASHMAP_REARRANGE_ON_FIND  Elt *prev = 0;  size_t b = bucket(key);  for (Elt *e = _buckets[b]; e; prev = e, e = e->next)    if (e->key == key) {      if (prev) {        // move to front        prev->next = e->next;	e->next = _buckets[b];	_buckets[b] = e;      }      return e;    }  return 0;#else  for (Elt *e = _buckets[bucket(key)]; e; e = e->next)    if (e->key == key)      return e;  return 0;#endif}template <class K, class V>voidHashMap<K, V>::resize0(size_t new_nbuckets){    Elt **new_buckets = (Elt **) CLICK_LALLOC(new_nbuckets * sizeof(Elt *));    for (size_t i = 0; i < new_nbuckets; i++)	new_buckets[i] = 0;  size_t old_nbuckets = _nbuckets;  Elt **old_buckets = _buckets;  _nbuckets = new_nbuckets;  _buckets = new_buckets;  if (dynamic_resizing())    set_dynamic_resizing(true);	// reset threshold  for (size_t i = 0; i < old_nbuckets; i++)    for (Elt *e = old_buckets[i]; e; ) {      Elt *n = e->next;      size_t b = bucket(e->key);      e->next = new_buckets[b];      new_buckets[b] = e;      e = n;    }  CLICK_LFREE(old_buckets, old_nbuckets * sizeof(Elt *));}template <class K, class V>voidHashMap<K, V>::resize(size_t want_nbuckets){  size_t new_nbuckets = 1;  while (new_nbuckets < want_nbuckets && new_nbuckets < MAX_NBUCKETS)    new_nbuckets = ((new_nbuckets + 1) << 1) - 1;  assert(new_nbuckets > 0 && new_nbuckets <= MAX_NBUCKETS);  if (_nbuckets != new_nbuckets)    resize0(new_nbuckets);}template <class K, class V>boolHashMap<K, V>::insert(const K &key, const V &value){  size_t b = bucket(key);  for (Elt *e = _buckets[b]; e; e = e->next)    if (e->key == key) {      e->value = value;      return false;    }  if (_n >= _capacity) {    resize(_nbuckets + 1);    b = bucket(key);  }  if (Elt *e = reinterpret_cast<Elt *>(_arena->alloc())) {    new(reinterpret_cast<void *>(&e->key)) K(key);    new(reinterpret_cast<void *>(&e->value)) V(value);    e->next = _buckets[b];    _buckets[b] = e;    _n++;  }  return true;}template <class K, class V>boolHashMap<K, V>::erase(const K &key){  size_t b = bucket(key);  Elt *prev = 0;  Elt *e = _buckets[b];  while (e && !(e->key == key)) {    prev = e;    e = e->next;  }  if (e) {    if (prev)      prev->next = e->next;    else      _buckets[b] = e->next;    e->key.~K();    e->value.~V();    _arena->free(e);    _n--;    return true;  } else    return false;}template <class K, class V>typename HashMap<K, V>::Pair *HashMap<K, V>::find_pair_force(const K &key, const V &default_value){  size_t b = bucket(key);  for (Elt *e = _buckets[b]; e; e = e->next)    if (e->key == key)      return e;  if (_n >= _capacity) {    resize(_nbuckets + 1);    b = bucket(key);  }  if (Elt *e = reinterpret_cast<Elt *>(_arena->alloc())) {    new(reinterpret_cast<void *>(&e->key)) K(key);    new(reinterpret_cast<void *>(&e->value)) V(default_value);    e->next = _buckets[b];    _buckets[b] = e;    _n++;    return e;  } else    return 0;}template <class K, class V>voidHashMap<K, V>::clear(){  for (size_t i = 0; i < _nbuckets; i++) {    for (Elt *e = _buckets[i]; e; ) {      Elt *next = e->next;      e->key.~K();      e->value.~V();      _arena->free(e);      e = next;    }    _buckets[i] = 0;  }  _n = 0;}template <class K, class V>voidHashMap<K, V>::swap(HashMap<K, V> &o){  Elt **t_elts;  V t_v;  size_t t_size;  HashMap_Arena *t_arena;  t_elts = _buckets; _buckets = o._buckets; o._buckets = t_elts;  t_size = _nbuckets; _nbuckets = o._nbuckets; o._nbuckets = t_size;  t_v = _default_value; _default_value = o._default_value; o._default_value = t_v;  t_size = _n; _n = o._n; o._n = t_size;  t_size = _capacity; _capacity = o._capacity; o._capacity = t_size;  t_arena = _arena; _arena = o._arena; o._arena = t_arena;}template <class K, class V>_HashMap_const_iterator<K, V>::_HashMap_const_iterator(const HashMap<K, V> *hm, bool begin)  : _hm(hm){  size_t nb = _hm->_nbuckets;  typename HashMap<K, V>::Elt **b = _hm->_buckets;  for (_bucket = 0; _bucket < nb && begin; _bucket++)    if (b[_bucket]) {      _elt = b[_bucket];      return;    }  _elt = 0;}template <class K, class V>void_HashMap_const_iterator<K, V>::operator++(int){  if (_elt->next)    _elt = _elt->next;  else {    size_t nb = _hm->_nbuckets;    typename HashMap<K, V>::Elt **b = _hm->_buckets;    for (_bucket++; _bucket < nb; _bucket++)      if (b[_bucket]) {	_elt = b[_bucket];	return;      }    _elt = 0;  }}#if 0static size_tHashMap_partition_elts(void **elts, size_t left, size_t right){  void *pivot = elts[(left + right) / 2];

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲激情图片小说视频| 91国偷自产一区二区三区观看| 精品无人区卡一卡二卡三乱码免费卡 | 亚洲色图制服诱惑| 91丨porny丨国产| 亚洲一区视频在线| 欧美一二三四在线| 国产精品一区在线| 国产精品日韩成人| 欧洲一区二区三区免费视频| 亚洲国产精品久久久久秋霞影院| 3751色影院一区二区三区| 国内精品久久久久影院色| 国产香蕉久久精品综合网| 色8久久精品久久久久久蜜| 偷拍自拍另类欧美| 国产日韩欧美精品电影三级在线| 97久久精品人人做人人爽50路| 亚洲一区二区三区影院| 日韩精品一区二区三区中文不卡| 高清成人在线观看| 午夜精品久久久久久久久久| 26uuu亚洲综合色| 91小视频在线| 美女视频黄久久| 中文字幕人成不卡一区| 欧美视频在线一区二区三区| 国产精品亚洲成人| 亚洲一区二区三区在线看| 久久精品综合网| 欧美日韩黄视频| 不卡电影一区二区三区| 亚洲一区二区精品久久av| 久久久国产午夜精品| 欧美视频一区二| av网站免费线看精品| 国产精品99久久久久久久vr| 中文无字幕一区二区三区| 韩国精品一区二区| 亚洲综合免费观看高清完整版| 精品久久国产97色综合| 在线观看成人免费视频| 精品中文字幕一区二区| 亚洲一区二区三区四区在线免费观看 | 99久久精品免费精品国产| 日韩精品一二区| 一区二区三区四区不卡视频| 国产欧美1区2区3区| 日韩三级高清在线| 在线视频欧美区| av在线不卡电影| 国产成人在线免费| 久草热8精品视频在线观看| 亚洲一区在线播放| 亚洲欧美色一区| 中文字幕一区二区不卡| 久久久久亚洲综合| 日韩精品在线看片z| 欧美理论在线播放| 欧美亚洲国产怡红院影院| 99精品欧美一区| 成人激情av网| 成人在线视频一区| 国产成人av电影在线| 国产一区二区电影| 久久99精品视频| 久久疯狂做爰流白浆xx| 日本不卡123| 天堂影院一区二区| 日韩国产在线一| 亚洲成人免费视频| 丝袜脚交一区二区| 婷婷久久综合九色国产成人| 亚洲sss视频在线视频| 午夜av电影一区| 日韩激情视频在线观看| 婷婷久久综合九色综合伊人色| 午夜a成v人精品| 美美哒免费高清在线观看视频一区二区 | 亚洲欧美日韩国产综合在线| 国产精品国产三级国产普通话99 | 日韩三区在线观看| 欧美大片拔萝卜| 精品国产凹凸成av人网站| 久久综合狠狠综合久久综合88| 亚洲精品在线三区| 国产人成一区二区三区影院| 日本一区二区三区免费乱视频| 国产日韩欧美电影| 亚洲欧洲精品一区二区三区不卡| 国产精品国产三级国产aⅴ中文 | 91精品在线观看入口| 51久久夜色精品国产麻豆| 日韩欧美黄色影院| 久久无码av三级| 激情六月婷婷久久| 日韩综合一区二区| 夜夜爽夜夜爽精品视频| 欧美韩国日本一区| 国产欧美一区视频| 日韩一区二区在线免费观看| 精品国产乱子伦一区| 久久精品夜色噜噜亚洲aⅴ| 国产精品你懂的在线欣赏| 亚洲女女做受ⅹxx高潮| 日韩激情av在线| 国产91精品免费| 在线免费不卡电影| 欧美不卡一区二区| 亚洲欧美经典视频| 久久精品国产成人一区二区三区 | 欧美成人一区二区三区在线观看| 2014亚洲片线观看视频免费| 中文字幕在线观看不卡视频| 首页国产丝袜综合| 成人小视频在线| 欧美日韩黄色一区二区| 久久精品夜夜夜夜久久| 亚洲影视在线播放| 粉嫩av一区二区三区在线播放 | 欧美无砖专区一中文字| 久久色视频免费观看| 一区二区三区在线免费| 国产一区二区成人久久免费影院| 色成人在线视频| 久久日韩粉嫩一区二区三区| 亚洲精品日日夜夜| 精品一区二区国语对白| 在线观看日韩av先锋影音电影院| www日韩大片| 丝袜美腿亚洲综合| 99久久精品免费看国产免费软件| 欧美成人免费网站| 亚洲福中文字幕伊人影院| 成人综合日日夜夜| 精品久久久久久综合日本欧美| 亚洲综合在线免费观看| 国产精品一区二区在线播放| 91精品黄色片免费大全| 亚洲激情六月丁香| 粉嫩欧美一区二区三区高清影视| 91精品国产色综合久久| 一区二区免费看| 成人午夜激情在线| 久久影视一区二区| 精品综合免费视频观看| 欧美久久一区二区| 亚洲h精品动漫在线观看| 色婷婷久久99综合精品jk白丝| 欧美极品xxx| 国产伦精品一区二区三区在线观看| 欧美精品电影在线播放| 亚洲综合视频网| 欧美中文字幕不卡| 一区二区三区欧美亚洲| 91亚洲精品乱码久久久久久蜜桃| 国产精品无人区| 成人激情小说乱人伦| 欧美国产一区在线| 国产成人啪免费观看软件| 精品国产一区二区精华| 麻豆一区二区三区| 日韩写真欧美这视频| 日韩电影在线观看电影| 91精品国产综合久久久蜜臀粉嫩 | 一本久久a久久免费精品不卡| 天堂影院一区二区| 国产精品性做久久久久久| 久久久99精品久久| 国产成人三级在线观看| 国产嫩草影院久久久久| 国产宾馆实践打屁股91| 国产精品午夜免费| 91丨porny丨首页| 亚洲一卡二卡三卡四卡| 欧美日韩亚洲另类| 免费观看一级特黄欧美大片| 日韩欧美在线网站| 国产自产2019最新不卡| 国产日韩精品一区二区三区| 成人免费视频一区二区| 亚洲欧美日韩小说| 欧美日韩国产免费| 精品一区二区三区蜜桃| 国产亚洲综合av| 91偷拍与自偷拍精品| 亚洲尤物视频在线| 欧美一区二区大片| 国产精品一区二区久激情瑜伽| 国产精品视频看| 欧美色图激情小说| 国内欧美视频一区二区| 国产精品美女久久久久久久网站| 91麻豆国产福利精品| 天天影视涩香欲综合网| 久久精品一区二区三区四区| 色综合久久久网| 美女在线一区二区| 亚洲欧美在线观看| 91精品国产福利|