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

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

?? ltable.c

?? 腳本語言lua-5.1的源代碼, 非常的經典!
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*** $Id: ltable.c,v 2.32 2006/01/18 11:49:02 roberto Exp $** Lua tables (hash)** See Copyright Notice in lua.h*//*** Implementation of tables (aka arrays, objects, or hash tables).** Tables keep its elements in two parts: an array part and a hash part.** Non-negative integer keys are all candidates to be kept in the array** part. The actual size of the array is the largest `n' such that at** least half the slots between 0 and n are in use.** Hash uses a mix of chained scatter table with Brent's variation.** A main invariant of these tables is that, if an element is not** in its main position (i.e. the `original' position that its hash gives** to it), then the colliding element is in its own main position.** Hence even when the load factor reaches 100%, performance remains good.*/#include <math.h>#include <string.h>#define ltable_c#define LUA_CORE#include "lua.h"#include "ldebug.h"#include "ldo.h"#include "lgc.h"#include "lmem.h"#include "lobject.h"#include "lstate.h"#include "ltable.h"/*** max size of array part is 2^MAXBITS*/#if LUAI_BITSINT > 26#define MAXBITS		26#else#define MAXBITS		(LUAI_BITSINT-2)#endif#define MAXASIZE	(1 << MAXBITS)#define hashpow2(t,n)      (gnode(t, lmod((n), sizenode(t))))  #define hashstr(t,str)  hashpow2(t, (str)->tsv.hash)#define hashboolean(t,p)        hashpow2(t, p)/*** for some types, it is better to avoid modulus by power of 2, as** they tend to have many 2 factors.*/#define hashmod(t,n)	(gnode(t, ((n) % ((sizenode(t)-1)|1))))#define hashpointer(t,p)	hashmod(t, IntPoint(p))/*** number of ints inside a lua_Number*/#define numints		cast_int(sizeof(lua_Number)/sizeof(int))#define dummynode		(&dummynode_)static const Node dummynode_ = {  {{NULL}, LUA_TNIL},  /* value */  {{{NULL}, LUA_TNIL, NULL}}  /* key */};/*** hash for lua_Numbers*/static Node *hashnum (const Table *t, lua_Number n) {  unsigned int a[numints];  int i;  n += 1;  /* normalize number (avoid -0) */  lua_assert(sizeof(a) <= sizeof(n));  memcpy(a, &n, sizeof(a));  for (i = 1; i < numints; i++) a[0] += a[i];  return hashmod(t, a[0]);}/*** returns the `main' position of an element in a table (that is, the index** of its hash value)*/static Node *mainposition (const Table *t, const TValue *key) {  switch (ttype(key)) {    case LUA_TNUMBER:      return hashnum(t, nvalue(key));    case LUA_TSTRING:      return hashstr(t, rawtsvalue(key));    case LUA_TBOOLEAN:      return hashboolean(t, bvalue(key));    case LUA_TLIGHTUSERDATA:      return hashpointer(t, pvalue(key));    default:      return hashpointer(t, gcvalue(key));  }}/*** returns the index for `key' if `key' is an appropriate key to live in** the array part of the table, -1 otherwise.*/static int arrayindex (const TValue *key) {  if (ttisnumber(key)) {    lua_Number n = nvalue(key);    int k;    lua_number2int(k, n);    if (luai_numeq(cast_num(k), n))      return k;  }  return -1;  /* `key' did not match some condition */}/*** returns the index of a `key' for table traversals. First goes all** elements in the array part, then elements in the hash part. The** beginning of a traversal is signalled by -1.*/static int findindex (lua_State *L, Table *t, StkId key) {  int i;  if (ttisnil(key)) return -1;  /* first iteration */  i = arrayindex(key);  if (0 < i && i <= t->sizearray)  /* is `key' inside array part? */    return i-1;  /* yes; that's the index (corrected to C) */  else {    Node *n = mainposition(t, key);    do {  /* check whether `key' is somewhere in the chain */      /* key may be dead already, but it is ok to use it in `next' */      if (luaO_rawequalObj(key2tval(n), key) ||            (ttype(gkey(n)) == LUA_TDEADKEY && iscollectable(key) &&             gcvalue(gkey(n)) == gcvalue(key))) {        i = cast_int(n - gnode(t, 0));  /* key index in hash table */        /* hash elements are numbered after array ones */        return i + t->sizearray;      }      else n = gnext(n);    } while (n);    luaG_runerror(L, "invalid key to " LUA_QL("next"));  /* key not found */    return 0;  /* to avoid warnings */  }}int luaH_next (lua_State *L, Table *t, StkId key) {  int i = findindex(L, t, key);  /* find original element */  for (i++; i < t->sizearray; i++) {  /* try first array part */    if (!ttisnil(&t->array[i])) {  /* a non-nil value? */      setnvalue(key, cast_num(i+1));      setobj2s(L, key+1, &t->array[i]);      return 1;    }  }  for (i -= t->sizearray; i < sizenode(t); i++) {  /* then hash part */    if (!ttisnil(gval(gnode(t, i)))) {  /* a non-nil value? */      setobj2s(L, key, key2tval(gnode(t, i)));      setobj2s(L, key+1, gval(gnode(t, i)));      return 1;    }  }  return 0;  /* no more elements */}/*** {=============================================================** Rehash** ==============================================================*/static int computesizes (int nums[], int *narray) {  int i;  int twotoi;  /* 2^i */  int a = 0;  /* number of elements smaller than 2^i */  int na = 0;  /* number of elements to go to array part */  int n = 0;  /* optimal size for array part */  for (i = 0, twotoi = 1; twotoi/2 < *narray; i++, twotoi *= 2) {    if (nums[i] > 0) {      a += nums[i];      if (a > twotoi/2) {  /* more than half elements present? */        n = twotoi;  /* optimal size (till now) */        na = a;  /* all elements smaller than n will go to array part */      }    }    if (a == *narray) break;  /* all elements already counted */  }  *narray = n;  lua_assert(*narray/2 <= na && na <= *narray);  return na;}static int countint (const TValue *key, int *nums) {  int k = arrayindex(key);  if (0 < k && k <= MAXASIZE) {  /* is `key' an appropriate array index? */    nums[ceillog2(k)]++;  /* count as such */    return 1;  }  else    return 0;}static int numusearray (const Table *t, int *nums) {  int lg;  int ttlg;  /* 2^lg */  int ause = 0;  /* summation of `nums' */  int i = 1;  /* count to traverse all array keys */  for (lg=0, ttlg=1; lg<=MAXBITS; lg++, ttlg*=2) {  /* for each slice */    int lc = 0;  /* counter */    int lim = ttlg;    if (lim > t->sizearray) {      lim = t->sizearray;  /* adjust upper limit */      if (i > lim)        break;  /* no more elements to count */    }    /* count elements in range (2^(lg-1), 2^lg] */    for (; i <= lim; i++) {      if (!ttisnil(&t->array[i-1]))        lc++;    }    nums[lg] += lc;    ause += lc;  }  return ause;}static int numusehash (const Table *t, int *nums, int *pnasize) {  int totaluse = 0;  /* total number of elements */  int ause = 0;  /* summation of `nums' */  int i = sizenode(t);  while (i--) {    Node *n = &t->node[i];    if (!ttisnil(gval(n))) {      ause += countint(key2tval(n), nums);      totaluse++;    }  }  *pnasize += ause;  return totaluse;}static void setarrayvector (lua_State *L, Table *t, int size) {  int i;  luaM_reallocvector(L, t->array, t->sizearray, size, TValue);  for (i=t->sizearray; i<size; i++)     setnilvalue(&t->array[i]);  t->sizearray = size;}static void setnodevector (lua_State *L, Table *t, int size) {  int lsize;  if (size == 0) {  /* no elements to hash part? */    t->node = cast(Node *, dummynode);  /* use common `dummynode' */    lsize = 0;  }  else {    int i;    lsize = ceillog2(size);    if (lsize > MAXBITS)      luaG_runerror(L, "table overflow");    size = twoto(lsize);    t->node = luaM_newvector(L, size, Node);    for (i=0; i<size; i++) {      Node *n = gnode(t, i);      gnext(n) = NULL;      setnilvalue(gkey(n));      setnilvalue(gval(n));    }  }  t->lsizenode = cast_byte(lsize);  t->lastfree = gnode(t, size);  /* all positions are free */}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩午夜在线播放| 美女一区二区三区在线观看| 午夜激情久久久| 成人免费电影视频| 欧美肥妇free| 一区二区三区在线视频免费观看| 美女尤物国产一区| 欧美日韩精品一区二区三区蜜桃 | 欧美午夜寂寞影院| 久久精品免视看| 久久er精品视频| 欧美精品一级二级三级| 亚洲精品伦理在线| av网站一区二区三区| 国产亚洲欧美日韩在线一区| 日本在线不卡视频一二三区| 欧美伊人久久大香线蕉综合69| 国产精品成人在线观看| 国产二区国产一区在线观看| 亚洲精品一区二区三区在线观看 | 在线综合视频播放| 亚洲宅男天堂在线观看无病毒| 粉嫩av亚洲一区二区图片| 久久久不卡网国产精品二区| 久久国产精品72免费观看| 日韩欧美在线观看一区二区三区| 亚洲国产精品一区二区尤物区| 91亚洲精品乱码久久久久久蜜桃| 中文字幕国产一区二区| 国产不卡高清在线观看视频| 久久久精品国产免大香伊| 国产一区二区网址| 国产亚洲精品aa| 国产99久久久国产精品潘金网站| 欧美激情在线观看视频免费| a4yy欧美一区二区三区| 亚洲人成人一区二区在线观看| 97se亚洲国产综合自在线不卡| 亚洲欧美色图小说| 在线观看日韩毛片| 蜜臀91精品一区二区三区| 精品国产乱码久久久久久蜜臀 | 蜜桃视频一区二区三区在线观看| 欧美一区二区三区播放老司机| 日本不卡高清视频| 国产午夜精品一区二区三区视频 | 欧美精品一级二级| 久久99国产精品久久99果冻传媒| 久久天天做天天爱综合色| 国产盗摄精品一区二区三区在线 | 中文字幕一区二区三区在线观看| 国产成人亚洲综合a∨婷婷| 中文字幕高清不卡| 欧美日韩黄色影视| 国产东北露脸精品视频| 亚洲丝袜另类动漫二区| 欧美群妇大交群中文字幕| 美女久久久精品| 中文字幕精品—区二区四季| 色婷婷国产精品久久包臀| 免费观看久久久4p| 亚洲人吸女人奶水| 欧美成人伊人久久综合网| 99精品热视频| 毛片基地黄久久久久久天堂| 欧美国产禁国产网站cc| 欧美精品一二三| 成人三级伦理片| 天涯成人国产亚洲精品一区av| 久久综合狠狠综合久久激情| 色成人在线视频| 国产河南妇女毛片精品久久久| 一区二区三区在线视频观看58| 精品国产电影一区二区| 在线观看一区二区精品视频| 国产精品亚洲专一区二区三区| 夜色激情一区二区| 国产三级精品视频| 日韩美女视频一区二区在线观看| 91香蕉视频污在线| 国产自产视频一区二区三区| 亚洲不卡一区二区三区| 国产精品久久久久桃色tv| 欧美成人官网二区| 9191久久久久久久久久久| 一本到一区二区三区| 国产黑丝在线一区二区三区| 免费观看在线色综合| 亚洲国产一区视频| 一区二区视频在线看| 亚洲国产成人一区二区三区| 欧美www视频| 日韩一区二区三区视频| 欧美视频三区在线播放| 91色在线porny| 成人一级片在线观看| 精油按摩中文字幕久久| 五月天中文字幕一区二区| 亚洲综合在线免费观看| 国产精品盗摄一区二区三区| 国产午夜久久久久| 久久久久高清精品| 久久久久久一二三区| 精品欧美一区二区在线观看| 日韩你懂的电影在线观看| 欧美福利视频一区| 91精品麻豆日日躁夜夜躁| 欧美肥胖老妇做爰| 欧美一级xxx| 精品国产污污免费网站入口| 欧美一区二区三级| 精品欧美一区二区在线观看| 精品久久免费看| 久久影院电视剧免费观看| 久久麻豆一区二区| 欧美激情一区三区| 国产精品嫩草99a| 最新热久久免费视频| 亚洲免费伊人电影| 亚洲欧美乱综合| 亚洲国产综合视频在线观看| 亚洲大尺度视频在线观看| 视频一区视频二区中文字幕| 奇米精品一区二区三区四区 | 天天色天天操综合| 日本在线不卡视频| 国产精品1区2区| 91在线码无精品| 欧美日韩精品是欧美日韩精品| 在线电影国产精品| 久久精品一区二区三区四区| 国产精品福利一区二区| 亚洲一区二区四区蜜桃| 美女看a上一区| kk眼镜猥琐国模调教系列一区二区 | 亚洲一二三四久久| 男人的天堂亚洲一区| 国产精品资源在线观看| 成人精品高清在线| 欧美在线一二三四区| 精品人伦一区二区色婷婷| 亚洲欧美一区二区在线观看| 亚洲.国产.中文慕字在线| 精品制服美女丁香| 色综合久久99| 精品国产乱码久久久久久久| 成人欧美一区二区三区白人| 日韩中文字幕亚洲一区二区va在线 | 日韩综合小视频| 国产99久久久久久免费看农村| 欧美吻胸吃奶大尺度电影| 欧美zozozo| 一区二区免费视频| 国产精品一区二区三区99| 91老司机福利 在线| 精品国产百合女同互慰| 亚洲免费在线视频一区 二区| 久99久精品视频免费观看| av不卡一区二区三区| 日韩一二三区视频| 亚洲一区二区三区在线播放| 国产乱码精品一区二区三区av| 欧美日韩三级在线| 国产精品色眯眯| 久久成人综合网| 欧美午夜在线观看| 成人免费视频在线观看| 精品一区二区三区免费视频| 欧美三级在线视频| 亚洲乱码日产精品bd| 国产米奇在线777精品观看| 欧美日本免费一区二区三区| 亚洲色大成网站www久久九九| 韩日av一区二区| 日韩三级电影网址| 亚洲超碰精品一区二区| 日本久久电影网| 亚洲欧美一区二区视频| 国产福利91精品一区| 久久综合九色综合97婷婷女人| 舔着乳尖日韩一区| 欧美无人高清视频在线观看| 亚洲欧美一区二区三区久本道91| 国产99精品视频| 国产亚洲美州欧州综合国| 看片的网站亚洲| 91精品国产色综合久久久蜜香臀| 亚洲电影欧美电影有声小说| 91免费看`日韩一区二区| 国产精品色眯眯| 国产成人自拍网| 久久综合九色综合欧美亚洲| 捆绑调教一区二区三区| 日韩视频中午一区| 免费日韩伦理电影| 精品国产伦一区二区三区免费| 美日韩一区二区三区| 精品精品欲导航| 国产精品小仙女| 国产精品美女久久久久久久久|