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

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

?? lookup3.c

?? 幾種c語言的hash算法
?? C
?? 第 1 頁 / 共 3 頁
字號:
    k8 = (const uint8_t *)k;    switch(length)    {    case 12: c+=k[2]; b+=k[1]; a+=k[0]; break;    case 11: c+=((uint32_t)k8[10])<<16;  /* fall through */    case 10: c+=((uint32_t)k8[9])<<8;    /* fall through */    case 9 : c+=k8[8];                   /* fall through */    case 8 : b+=k[1]; a+=k[0]; break;    case 7 : b+=((uint32_t)k8[6])<<16;   /* fall through */    case 6 : b+=((uint32_t)k8[5])<<8;    /* fall through */    case 5 : b+=k8[4];                   /* fall through */    case 4 : a+=k[0]; break;    case 3 : a+=((uint32_t)k8[2])<<16;   /* fall through */    case 2 : a+=((uint32_t)k8[1])<<8;    /* fall through */    case 1 : a+=k8[0]; break;    case 0 : return c;    }#endif /* !valgrind */  } else if (HASH_LITTLE_ENDIAN && ((u.i & 0x1) == 0)) {    const uint16_t *k = (const uint16_t *)key;         /* read 16-bit chunks */    const uint8_t  *k8;    /*--------------- all but last block: aligned reads and different mixing */    while (length > 12)    {      a += k[0] + (((uint32_t)k[1])<<16);      b += k[2] + (((uint32_t)k[3])<<16);      c += k[4] + (((uint32_t)k[5])<<16);      mix(a,b,c);      length -= 12;      k += 6;    }    /*----------------------------- handle the last (probably partial) block */    k8 = (const uint8_t *)k;    switch(length)    {    case 12: c+=k[4]+(((uint32_t)k[5])<<16);             b+=k[2]+(((uint32_t)k[3])<<16);             a+=k[0]+(((uint32_t)k[1])<<16);             break;    case 11: c+=((uint32_t)k8[10])<<16;     /* fall through */    case 10: c+=k[4];             b+=k[2]+(((uint32_t)k[3])<<16);             a+=k[0]+(((uint32_t)k[1])<<16);             break;    case 9 : c+=k8[8];                      /* fall through */    case 8 : b+=k[2]+(((uint32_t)k[3])<<16);             a+=k[0]+(((uint32_t)k[1])<<16);             break;    case 7 : b+=((uint32_t)k8[6])<<16;      /* fall through */    case 6 : b+=k[2];             a+=k[0]+(((uint32_t)k[1])<<16);             break;    case 5 : b+=k8[4];                      /* fall through */    case 4 : a+=k[0]+(((uint32_t)k[1])<<16);             break;    case 3 : a+=((uint32_t)k8[2])<<16;      /* fall through */    case 2 : a+=k[0];             break;    case 1 : a+=k8[0];             break;    case 0 : return c;                     /* zero length requires no mixing */    }  } else {                        /* need to read the key one byte at a time */    const uint8_t *k = (const uint8_t *)key;    /*--------------- all but the last block: affect some 32 bits of (a,b,c) */    while (length > 12)    {      a += k[0];      a += ((uint32_t)k[1])<<8;      a += ((uint32_t)k[2])<<16;      a += ((uint32_t)k[3])<<24;      b += k[4];      b += ((uint32_t)k[5])<<8;      b += ((uint32_t)k[6])<<16;      b += ((uint32_t)k[7])<<24;      c += k[8];      c += ((uint32_t)k[9])<<8;      c += ((uint32_t)k[10])<<16;      c += ((uint32_t)k[11])<<24;      mix(a,b,c);      length -= 12;      k += 12;    }    /*-------------------------------- last block: affect all 32 bits of (c) */    switch(length)                   /* all the case statements fall through */    {    case 12: c+=((uint32_t)k[11])<<24;    case 11: c+=((uint32_t)k[10])<<16;    case 10: c+=((uint32_t)k[9])<<8;    case 9 : c+=k[8];    case 8 : b+=((uint32_t)k[7])<<24;    case 7 : b+=((uint32_t)k[6])<<16;    case 6 : b+=((uint32_t)k[5])<<8;    case 5 : b+=k[4];    case 4 : a+=((uint32_t)k[3])<<24;    case 3 : a+=((uint32_t)k[2])<<16;    case 2 : a+=((uint32_t)k[1])<<8;    case 1 : a+=k[0];             break;    case 0 : return c;    }  }  final(a,b,c);  return c;}/* * hashlittle2: return 2 32-bit hash values * * This is identical to hashlittle(), except it returns two 32-bit hash * values instead of just one.  This is good enough for hash table * lookup with 2^^64 buckets, or if you want a second hash if you're not * happy with the first, or if you want a probably-unique 64-bit ID for * the key.  *pc is better mixed than *pb, so use *pc first.  If you want * a 64-bit value do something like "*pc + (((uint64_t)*pb)<<32)". */void hashlittle2(   const void *key,       /* the key to hash */  size_t      length,    /* length of the key */  uint32_t   *pc,        /* IN: primary initval, OUT: primary hash */  uint32_t   *pb)        /* IN: secondary initval, OUT: secondary hash */{  uint32_t a,b,c;                                          /* internal state */  union { const void *ptr; size_t i; } u;     /* needed for Mac Powerbook G4 */  /* Set up the internal state */  a = b = c = 0xdeadbeef + ((uint32_t)length) + *pc;  c += *pb;  u.ptr = key;  if (HASH_LITTLE_ENDIAN && ((u.i & 0x3) == 0)) {    const uint32_t *k = (const uint32_t *)key;         /* read 32-bit chunks */    const uint8_t  *k8;    /*------ all but last block: aligned reads and affect 32 bits of (a,b,c) */    while (length > 12)    {      a += k[0];      b += k[1];      c += k[2];      mix(a,b,c);      length -= 12;      k += 3;    }    /*----------------------------- handle the last (probably partial) block */    /*      * "k[2]&0xffffff" actually reads beyond the end of the string, but     * then masks off the part it's not allowed to read.  Because the     * string is aligned, the masked-off tail is in the same word as the     * rest of the string.  Every machine with memory protection I've seen     * does it on word boundaries, so is OK with this.  But VALGRIND will     * still catch it and complain.  The masking trick does make the hash     * noticably faster for short strings (like English words).     */#ifndef VALGRIND    switch(length)    {    case 12: c+=k[2]; b+=k[1]; a+=k[0]; break;    case 11: c+=k[2]&0xffffff; b+=k[1]; a+=k[0]; break;    case 10: c+=k[2]&0xffff; b+=k[1]; a+=k[0]; break;    case 9 : c+=k[2]&0xff; b+=k[1]; a+=k[0]; break;    case 8 : b+=k[1]; a+=k[0]; break;    case 7 : b+=k[1]&0xffffff; a+=k[0]; break;    case 6 : b+=k[1]&0xffff; a+=k[0]; break;    case 5 : b+=k[1]&0xff; a+=k[0]; break;    case 4 : a+=k[0]; break;    case 3 : a+=k[0]&0xffffff; break;    case 2 : a+=k[0]&0xffff; break;    case 1 : a+=k[0]&0xff; break;    case 0 : *pc=c; *pb=b; return;  /* zero length strings require no mixing */    }#else /* make valgrind happy */    k8 = (const uint8_t *)k;    switch(length)    {    case 12: c+=k[2]; b+=k[1]; a+=k[0]; break;    case 11: c+=((uint32_t)k8[10])<<16;  /* fall through */    case 10: c+=((uint32_t)k8[9])<<8;    /* fall through */    case 9 : c+=k8[8];                   /* fall through */    case 8 : b+=k[1]; a+=k[0]; break;    case 7 : b+=((uint32_t)k8[6])<<16;   /* fall through */    case 6 : b+=((uint32_t)k8[5])<<8;    /* fall through */    case 5 : b+=k8[4];                   /* fall through */    case 4 : a+=k[0]; break;    case 3 : a+=((uint32_t)k8[2])<<16;   /* fall through */    case 2 : a+=((uint32_t)k8[1])<<8;    /* fall through */    case 1 : a+=k8[0]; break;    case 0 : *pc=c; *pb=b; return;  /* zero length strings require no mixing */    }#endif /* !valgrind */  } else if (HASH_LITTLE_ENDIAN && ((u.i & 0x1) == 0)) {    const uint16_t *k = (const uint16_t *)key;         /* read 16-bit chunks */    const uint8_t  *k8;    /*--------------- all but last block: aligned reads and different mixing */    while (length > 12)    {      a += k[0] + (((uint32_t)k[1])<<16);      b += k[2] + (((uint32_t)k[3])<<16);      c += k[4] + (((uint32_t)k[5])<<16);      mix(a,b,c);      length -= 12;      k += 6;    }    /*----------------------------- handle the last (probably partial) block */    k8 = (const uint8_t *)k;    switch(length)    {    case 12: c+=k[4]+(((uint32_t)k[5])<<16);             b+=k[2]+(((uint32_t)k[3])<<16);             a+=k[0]+(((uint32_t)k[1])<<16);             break;    case 11: c+=((uint32_t)k8[10])<<16;     /* fall through */    case 10: c+=k[4];             b+=k[2]+(((uint32_t)k[3])<<16);             a+=k[0]+(((uint32_t)k[1])<<16);             break;    case 9 : c+=k8[8];                      /* fall through */    case 8 : b+=k[2]+(((uint32_t)k[3])<<16);             a+=k[0]+(((uint32_t)k[1])<<16);             break;    case 7 : b+=((uint32_t)k8[6])<<16;      /* fall through */    case 6 : b+=k[2];             a+=k[0]+(((uint32_t)k[1])<<16);             break;    case 5 : b+=k8[4];                      /* fall through */    case 4 : a+=k[0]+(((uint32_t)k[1])<<16);             break;    case 3 : a+=((uint32_t)k8[2])<<16;      /* fall through */    case 2 : a+=k[0];             break;    case 1 : a+=k8[0];             break;    case 0 : *pc=c; *pb=b; return;  /* zero length strings require no mixing */    }  } else {                        /* need to read the key one byte at a time */    const uint8_t *k = (const uint8_t *)key;    /*--------------- all but the last block: affect some 32 bits of (a,b,c) */    while (length > 12)    {      a += k[0];      a += ((uint32_t)k[1])<<8;      a += ((uint32_t)k[2])<<16;      a += ((uint32_t)k[3])<<24;      b += k[4];      b += ((uint32_t)k[5])<<8;      b += ((uint32_t)k[6])<<16;      b += ((uint32_t)k[7])<<24;      c += k[8];      c += ((uint32_t)k[9])<<8;      c += ((uint32_t)k[10])<<16;      c += ((uint32_t)k[11])<<24;      mix(a,b,c);      length -= 12;      k += 12;    }    /*-------------------------------- last block: affect all 32 bits of (c) */    switch(length)                   /* all the case statements fall through */    {    case 12: c+=((uint32_t)k[11])<<24;    case 11: c+=((uint32_t)k[10])<<16;    case 10: c+=((uint32_t)k[9])<<8;    case 9 : c+=k[8];    case 8 : b+=((uint32_t)k[7])<<24;    case 7 : b+=((uint32_t)k[6])<<16;    case 6 : b+=((uint32_t)k[5])<<8;    case 5 : b+=k[4];    case 4 : a+=((uint32_t)k[3])<<24;    case 3 : a+=((uint32_t)k[2])<<16;    case 2 : a+=((uint32_t)k[1])<<8;    case 1 : a+=k[0];             break;    case 0 : *pc=c; *pb=b; return;  /* zero length strings require no mixing */    }  }  final(a,b,c);  *pc=c; *pb=b;}/* * hashbig(): * This is the same as hashword() on big-endian machines.  It is different * from hashlittle() on all machines.  hashbig() takes advantage of * big-endian byte ordering.  */uint32_t hashbig( const void *key, size_t length, uint32_t initval){  uint32_t a,b,c;  union { const void *ptr; size_t i; } u; /* to cast key to (size_t) happily */  /* Set up the internal state */  a = b = c = 0xdeadbeef + ((uint32_t)length) + initval;  u.ptr = key;  if (HASH_BIG_ENDIAN && ((u.i & 0x3) == 0)) {    const uint32_t *k = (const uint32_t *)key;         /* read 32-bit chunks */    const uint8_t  *k8;    /*------ all but last block: aligned reads and affect 32 bits of (a,b,c) */    while (length > 12)    {      a += k[0];      b += k[1];      c += k[2];      mix(a,b,c);      length -= 12;      k += 3;    }    /*----------------------------- handle the last (probably partial) block */    /*      * "k[2]<<8" actually reads beyond the end of the string, but     * then shifts out the part it's not allowed to read.  Because the     * string is aligned, the illegal read is in the same word as the

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品国产网站| 欧美日韩一区二区在线观看 | 久久国产精品无码网站| 成人免费看视频| 91麻豆精品国产91久久久 | www.在线欧美| 日韩一区二区三区三四区视频在线观看| 26uuu亚洲婷婷狠狠天堂| 一区二区三区在线视频免费 | 久久免费电影网| 婷婷久久综合九色综合绿巨人 | 国内精品久久久久影院色| 欧美日韩亚洲综合一区| 国产精品久久久久永久免费观看| 免费观看久久久4p| 欧美男女性生活在线直播观看| 国产精品美女一区二区三区| 国产一区在线不卡| 亚洲精品一区二区三区福利| 肉肉av福利一精品导航| 欧美性受xxxx| 亚洲三级久久久| yourporn久久国产精品| 中文字幕免费不卡在线| 国产传媒日韩欧美成人| 久久五月婷婷丁香社区| 久久99国产精品免费| 欧美一区二区三区在线| 蜜乳av一区二区| 91精品国产综合久久精品麻豆| 亚洲成人激情av| 欧美久久免费观看| 蜜桃视频在线观看一区| 欧美一级电影网站| 九九九精品视频| 精品美女一区二区三区| 国产一区在线看| 国产三级精品在线| 国产成人免费9x9x人网站视频| 国产欧美精品一区| 成人ar影院免费观看视频| 国产精品私房写真福利视频| 91丨九色丨国产丨porny| 亚洲激情av在线| 欧美日韩综合色| 久色婷婷小香蕉久久| 2020国产精品| 成人美女视频在线观看| 亚洲欧洲综合另类在线| 在线精品视频一区二区三四| 日日夜夜一区二区| www久久精品| 成人一区在线观看| 亚洲欧美色综合| 91精品国产91热久久久做人人| 日本成人中文字幕| 国产日产亚洲精品系列| 91免费版在线看| 亚洲电影视频在线| 欧美精品一区二区三区高清aⅴ| 国产真实乱偷精品视频免| 亚洲欧洲日韩av| 69堂成人精品免费视频| 激情图片小说一区| 一区二区三区四区精品在线视频| 欧美久久久久免费| 成人性生交大片免费看中文| 亚洲国产成人av好男人在线观看| 日韩视频一区二区三区在线播放| 国产91丝袜在线18| 亚洲成a人v欧美综合天堂下载 | 欧美日韩极品在线观看一区| 精品中文av资源站在线观看| 国产精品蜜臀在线观看| 欧美日韩中文国产| 国产精品亚洲视频| 亚洲与欧洲av电影| 久久久久国产一区二区三区四区| 91蜜桃传媒精品久久久一区二区| 男人的j进女人的j一区| 国产精品久久久久精k8| 日韩午夜av电影| 欧美性受极品xxxx喷水| 国产精品99久久久久久有的能看| 亚洲高清免费在线| 国产精品欧美综合在线| 欧美大片免费久久精品三p| 91麻豆精品秘密| 懂色av中文一区二区三区| 日本欧美一区二区三区| 一二三区精品福利视频| 国产精品国产馆在线真实露脸| 日韩亚洲欧美综合| 91在线精品一区二区三区| 精品写真视频在线观看| 亚洲高清中文字幕| 一区二区三区国产豹纹内裤在线| 久久久91精品国产一区二区精品 | 91精品国产综合久久久久| 91在线观看免费视频| 日韩一区二区免费视频| 成人a级免费电影| 麻豆国产一区二区| 亚洲bt欧美bt精品| 91精品国产综合久久久久| 看电视剧不卡顿的网站| 亚洲欧洲国产日韩| 精品区一区二区| 国产美女娇喘av呻吟久久| 午夜精品福利一区二区三区av| 欧美激情一区在线观看| 欧美日韩中文国产| 99久久久精品| 欧美日韩小视频| 粉嫩av一区二区三区在线播放| 国产精品污www在线观看| 欧美三级视频在线| 国产成人免费xxxxxxxx| 午夜私人影院久久久久| 中文字幕精品综合| 欧美日韩国产乱码电影| 99国产精品久久久久久久久久 | 国产精品国产三级国产专播品爱网 | 强制捆绑调教一区二区| 国产蜜臀av在线一区二区三区| 色香色香欲天天天影视综合网| 久久99久久久久久久久久久| 亚洲高清久久久| 亚洲乱码日产精品bd| 久久精品网站免费观看| 中文字幕一区二区三区在线不卡 | 国产视频一区不卡| 亚洲欧美一区二区在线观看| 欧美韩国日本不卡| 极品美女销魂一区二区三区| 日韩免费高清av| 成人av动漫在线| av成人免费在线| www.在线欧美| 日韩欧美一区二区三区在线| 日日夜夜免费精品视频| 日本一区二区视频在线| 欧美久久一二区| 91视频在线观看| 日韩一区二区三区精品视频| 久久综合网色—综合色88| 亚洲欧洲另类国产综合| 亚洲国产日韩精品| 极品销魂美女一区二区三区| 99精品欧美一区二区三区小说| 在线不卡免费av| 国产精品天美传媒沈樵| 婷婷激情综合网| 福利视频网站一区二区三区| 在线观看国产精品网站| 久久综合99re88久久爱| 亚洲综合小说图片| 久久91精品国产91久久小草| 色偷偷久久一区二区三区| 91精品国产欧美日韩| 最新热久久免费视频| 强制捆绑调教一区二区| av中文一区二区三区| 日韩一区二区三区电影在线观看 | 色婷婷国产精品综合在线观看| 国产精品三级久久久久三级| 激情久久五月天| 日韩欧美一区二区三区在线| 亚洲一区二区三区中文字幕在线| 97成人超碰视| 日韩一区二区三区免费观看| 国产欧美日韩在线看| 蜜臀av性久久久久蜜臀aⅴ| 一本大道综合伊人精品热热| 国产婷婷精品av在线| 精品一区二区三区免费| 777久久久精品| 国产高清在线精品| 国产亚洲精品久| 成人午夜在线播放| 亚洲人成伊人成综合网小说| 蜜臂av日日欢夜夜爽一区| 91亚洲午夜精品久久久久久| 国产精品网站在线| 99视频精品免费视频| 美腿丝袜在线亚洲一区 | 国产精品久久久一本精品 | 亚洲天堂精品在线观看| 国产精品全国免费观看高清| 亚洲成人手机在线| 欧美日韩亚洲综合在线| 国产精品久久久久久亚洲伦| 久久成人精品无人区| 日韩欧美国产精品一区| 国产精品综合久久| 国产精品视频yy9299一区| 欧美主播一区二区三区美女| 亚洲电影视频在线| 26uuu精品一区二区| 色综合久久综合|