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

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

?? hash.c

?? gcc的組件
?? C
字號:
/* Hash tables for Objective C internal structures   Copyright (C) 1993, 1996, 1997, 2004 Free Software Foundation, Inc.This file is part of GCC.GCC is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2, or (at your option)any later version.GCC is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with GCC; see the file COPYING.  If not, write tothe Free Software Foundation, 51 Franklin Street, Fifth Floor,Boston, MA 02110-1301, USA.  *//* As a special exception, if you link this library with files   compiled with GCC to produce an executable, this does not cause   the resulting executable to be covered by the GNU General Public License.   This exception does not however invalidate any other reasons why   the executable file might be covered by the GNU General Public License.  */#include "assert.h"#include "objc/hash.h"#include "objc/runtime.h"		/* for DEBUG_PRINTF *//* These two macros determine when a hash table is full and   by how much it should be expanded respectively.   These equations are percentages.  */#define FULLNESS(cache) \   ((((cache)->size * 75) / 100) <= (cache)->used)#define EXPANSION(cache) \  ((cache)->size * 2)cache_ptrobjc_hash_new (unsigned int size, hash_func_type hash_func,	       compare_func_type compare_func){  cache_ptr cache;  /* Pass me a value greater than 0 and a power of 2.  */  assert (size);  assert (! (size & (size - 1)));  /* Allocate the cache structure.  calloc insures     its initialization for default values.  */  cache = (cache_ptr) objc_calloc (1, sizeof (struct cache));  assert (cache);  /* Allocate the array of buckets for the cache.     calloc initializes all of the pointers to NULL.  */  cache->node_table    = (node_ptr *) objc_calloc (size, sizeof (node_ptr));  assert (cache->node_table);  cache->size  = size;  /* This should work for all processor architectures? */  cache->mask = (size - 1);	  /* Store the hashing function so that codes can be computed.  */  cache->hash_func = hash_func;  /* Store the function that compares hash keys to     determine if they are equal.  */  cache->compare_func = compare_func;  return cache;}voidobjc_hash_delete (cache_ptr cache){  node_ptr node;  node_ptr next_node;  unsigned int i;  /* Purge all key/value pairs from the table.  */  /* Step through the nodes one by one and remove every node WITHOUT     using objc_hash_next. this makes objc_hash_delete much more efficient. */  for (i = 0;i < cache->size;i++) {    if ((node = cache->node_table[i])) {      /* an entry in the hash table has been found, now step through the	 nodes next in the list and free them. */      while ((next_node = node->next)) {	objc_hash_remove (cache,node->key);	node = next_node;      }      objc_hash_remove (cache,node->key);    }  }  /* Release the array of nodes and the cache itself.  */  objc_free(cache->node_table);  objc_free(cache);}voidobjc_hash_add (cache_ptr *cachep, const void *key, void *value){  size_t indx = (*(*cachep)->hash_func)(*cachep, key);  node_ptr node = (node_ptr) objc_calloc (1, sizeof (struct cache_node));  assert (node);  /* Initialize the new node.  */  node->key    = key;  node->value  = value;  node->next  = (*cachep)->node_table[indx];  /* Debugging.     Check the list for another key.  */#ifdef DEBUG  { node_ptr node1 = (*cachep)->node_table[indx];    while (node1) {      assert (node1->key != key);      node1 = node1->next;    }  }#endif  /* Install the node as the first element on the list.  */  (*cachep)->node_table[indx] = node;  /* Bump the number of entries in the cache.  */  ++(*cachep)->used;  /* Check the hash table's fullness.   We're going     to expand if it is above the fullness level.  */  if (FULLNESS (*cachep)) {    /* The hash table has reached its fullness level.  Time to       expand it.       I'm using a slow method here but is built on other       primitive functions thereby increasing its       correctness.  */    node_ptr node1 = NULL;    cache_ptr new = objc_hash_new (EXPANSION (*cachep),				   (*cachep)->hash_func,				   (*cachep)->compare_func);    DEBUG_PRINTF ("Expanding cache %#x from %d to %d\n",		  (int) *cachep, (*cachep)->size, new->size);    /* Copy the nodes from the first hash table to the new one.  */    while ((node1 = objc_hash_next (*cachep, node1)))      objc_hash_add (&new, node1->key, node1->value);    /* Trash the old cache.  */    objc_hash_delete (*cachep);    /* Return a pointer to the new hash table.  */    *cachep = new;  }}voidobjc_hash_remove (cache_ptr cache, const void *key){  size_t indx = (*cache->hash_func)(cache, key);  node_ptr node = cache->node_table[indx];  /* We assume there is an entry in the table.  Error if it is not.  */  assert (node);  /* Special case.  First element is the key/value pair to be removed.  */  if ((*cache->compare_func)(node->key, key)) {    cache->node_table[indx] = node->next;    objc_free(node);  } else {    /* Otherwise, find the hash entry.  */    node_ptr prev = node;    BOOL removed = NO;    do {      if ((*cache->compare_func)(node->key, key)) {        prev->next = node->next, removed = YES;        objc_free(node);      } else        prev = node, node = node->next;    } while (! removed && node);    assert (removed);  }  /* Decrement the number of entries in the hash table.  */  --cache->used;}node_ptrobjc_hash_next (cache_ptr cache, node_ptr node){  /* If the scan is being started then reset the last node     visitied pointer and bucket index.  */  if (! node)    cache->last_bucket  = 0;  /* If there is a node visited last then check for another     entry in the same bucket;  Otherwise step to the next bucket.  */  if (node) {    if (node->next)      /* There is a node which follows the last node	 returned.  Step to that node and retun it.  */      return node->next;    else      ++cache->last_bucket;  }  /* If the list isn't exhausted then search the buckets for     other nodes.  */  if (cache->last_bucket < cache->size) {    /*  Scan the remainder of the buckets looking for an entry	at the head of the list.  Return the first item found.  */    while (cache->last_bucket < cache->size)      if (cache->node_table[cache->last_bucket])        return cache->node_table[cache->last_bucket];      else        ++cache->last_bucket;    /* No further nodes were found in the hash table.  */    return NULL;  } else    return NULL;}/* Given KEY, return corresponding value for it in CACHE.   Return NULL if the KEY is not recorded.  */void *objc_hash_value_for_key (cache_ptr cache, const void *key){  node_ptr node = cache->node_table[(*cache->hash_func)(cache, key)];  void *retval = NULL;  if (node)    do {      if ((*cache->compare_func)(node->key, key)) {        retval = node->value;              break;      } else        node = node->next;    } while (! retval && node);  return retval;}/* Given KEY, return YES if it exists in the CACHE.   Return NO if it does not */BOOLobjc_hash_is_key_in_hash (cache_ptr cache, const void *key){  node_ptr node = cache->node_table[(*cache->hash_func)(cache, key)];  if (node)    do {      if ((*cache->compare_func)(node->key, key))	  return YES;      else        node = node->next;    } while (node);  return NO;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美日韩卡一| 久久久久久麻豆| 色悠悠久久综合| 色综合一个色综合亚洲| 91麻豆国产精品久久| 成人黄色国产精品网站大全在线免费观看| 韩国v欧美v日本v亚洲v| 国产麻豆日韩欧美久久| 国产成人精品免费| av亚洲精华国产精华精| 日本国产一区二区| 在线不卡的av| 久久久噜噜噜久久人人看| 国产精品久久久久一区| 亚洲精品久久嫩草网站秘色| 亚洲一区影音先锋| 美女尤物国产一区| 福利一区二区在线观看| 99re热这里只有精品免费视频| 在线一区二区三区| 日韩小视频在线观看专区| 国产片一区二区| 亚洲成人激情av| 国产自产v一区二区三区c| 成人美女视频在线看| 欧美亚洲国产一区二区三区| 日韩欧美一区在线观看| 久久久久久久久免费| 一区二区三区四区亚洲| 喷白浆一区二区| 成人夜色视频网站在线观看| 欧美三级韩国三级日本三斤| 精品国产乱码久久久久久1区2区| 亚洲欧洲av一区二区三区久久| 亚洲电影你懂得| 福利电影一区二区| 8x福利精品第一导航| 国产色产综合产在线视频| 一区二区三区中文在线观看| 国产最新精品精品你懂的| 欧美在线一区二区三区| 久久久精品2019中文字幕之3| 亚洲免费在线播放| 国内精品久久久久影院色| 欧美日韩在线免费视频| 国产人妖乱国产精品人妖| 亚洲成av人影院| 99久久婷婷国产精品综合| 日韩一区二区在线看片| 一区二区三区四区不卡视频| 国产精品综合久久| 欧美一级日韩免费不卡| 一区二区三区中文在线观看| 成人午夜私人影院| 久久香蕉国产线看观看99| 亚洲国产精品久久不卡毛片 | 97久久精品人人爽人人爽蜜臀| 欧美日韩久久久一区| 国产精品初高中害羞小美女文| 免费xxxx性欧美18vr| 欧美日韩午夜在线视频| 亚洲精品成人精品456| 成人性生交大片免费看视频在线 | 国产成人精品一区二区三区四区| 欧美精选在线播放| 亚洲制服欧美中文字幕中文字幕| 99精品欧美一区二区三区小说| 26uuu另类欧美亚洲曰本| 日韩制服丝袜先锋影音| 欧美日韩精品一区二区三区蜜桃| 伊人性伊人情综合网| 北岛玲一区二区三区四区| 国产婷婷色一区二区三区四区| 国内外成人在线| 久久久久久久性| 国产精品亚洲一区二区三区在线 | 国产精品国产三级国产普通话99| 国产在线日韩欧美| 久久久激情视频| 懂色一区二区三区免费观看| 国产精品午夜久久| 99久久精品国产毛片| 亚洲女同女同女同女同女同69| 色偷偷成人一区二区三区91| 亚洲欧美aⅴ...| 欧美剧情片在线观看| 日韩国产欧美在线视频| 欧美成人三级电影在线| 国产精品一区二区在线观看不卡| 国产欧美一二三区| 99久久99精品久久久久久| 一区二区三区不卡视频在线观看| 在线精品国精品国产尤物884a| 亚洲va天堂va国产va久| 日韩精品一区在线观看| 国产成人在线免费观看| 亚洲视频综合在线| 777午夜精品免费视频| 久草热8精品视频在线观看| 久久久综合激的五月天| 91在线精品秘密一区二区| 亚洲欧美日韩国产手机在线 | 欧美欧美欧美欧美| 黄网站免费久久| 国产亚洲1区2区3区| 91麻豆swag| 国产精品18久久久久久久久 | jizz一区二区| 亚洲狠狠爱一区二区三区| 欧美成人一区二区| 大桥未久av一区二区三区中文| 亚洲最新视频在线播放| 欧美精品一区二| 色婷婷亚洲综合| 国产一区二区在线看| 亚洲美女屁股眼交3| 日韩精品资源二区在线| 91蜜桃在线免费视频| 卡一卡二国产精品| 亚洲欧美激情在线| 久久精品人人做人人综合| 欧美亚洲动漫精品| 成人美女视频在线观看18| 日韩有码一区二区三区| 亚洲天堂网中文字| 精品日韩在线观看| 欧美日韩综合一区| 99久久综合99久久综合网站| 蜜臀av国产精品久久久久| 一区二区三区精品在线| 中文字幕av一区二区三区| 精品国免费一区二区三区| 欧美日本视频在线| 色老汉av一区二区三区| 国产成人免费在线| 久久99精品久久久久婷婷| 午夜精品一区二区三区免费视频 | 亚洲人成网站影音先锋播放| 精品久久久久久最新网址| 在线不卡中文字幕播放| 欧洲一区二区av| 色噜噜狠狠成人中文综合| 成人毛片老司机大片| 九色综合国产一区二区三区| 日韩精品一二三| 午夜精品福利一区二区三区蜜桃| 亚洲精品亚洲人成人网在线播放| 国产精品理论片在线观看| 国产亚洲人成网站| 久久精品视频在线免费观看 | 国产欧美日韩在线视频| 久久综合999| 久久久美女毛片| 国产欧美日韩精品在线| 国产一区二区在线免费观看| 国产亚洲制服色| 福利一区福利二区| 国模娜娜一区二区三区| 国产精品一品视频| 欧美一级高清片在线观看| 午夜不卡av在线| 麻豆精品国产91久久久久久| av影院午夜一区| 精品久久久久久亚洲综合网 | 91精品国产一区二区三区蜜臀 | 欧美不卡一区二区三区| 中文字幕在线一区免费| 麻豆91精品91久久久的内涵| caoporm超碰国产精品| 精品成人私密视频| 亚洲一区二区成人在线观看| 国产jizzjizz一区二区| 91精品国产一区二区三区香蕉| 亚洲精品美腿丝袜| 国产成人aaaa| 日韩精品一区二区三区在线观看| 亚洲裸体xxx| 成人成人成人在线视频| 久久久久久99精品| 久久精品免费观看| 欧美一区二区三区色| 亚洲已满18点击进入久久| 处破女av一区二区| 久久久久国产精品麻豆ai换脸| 麻豆精品视频在线观看视频| 在线免费视频一区二区| 亚洲图片欧美激情| 成人精品视频一区| 国产情人综合久久777777| 国内精品写真在线观看| 精品欧美一区二区在线观看| 日本中文字幕一区| 欧美一区二区三区不卡| 日本va欧美va精品发布| 91精品国产91热久久久做人人| 一区二区三区四区不卡视频 | 偷偷要91色婷婷| 在线91免费看| 日本美女一区二区三区视频| 91精品国产美女浴室洗澡无遮挡|