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

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

?? ftchash.c

?? netflow,抓包
?? C
字號:
/* * Copyright (c) 2001 Mark Fullmer and The Ohio State University * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * *      $Id: ftchash.c,v 1.13 2003/02/13 02:38:41 maf Exp $ */#include "ftconfig.h"#include "ftlib.h"#include <stdlib.h>#include <stddef.h>#if HAVE_STRINGS_H #include <strings.h>#endif#if HAVE_STRING_H  #include <string.h>#endifint sort_offset;static int cmp64(const void *a, const void *b);static int cmp40(const void *a, const void *b);static int cmp32(const void *a, const void *b);static int cmp16(const void *a, const void *b);static int cmp8(const void *a, const void *b);static int cmp_double(const void *a, const void *b);/* * function: ftchash_new * *   allocate and initialize new hash structure. * *   h_size -        size of hash table (number of buckets) *   d_size -        size of data record (multiple of long word byte alignment) *   key_size -      size of key *   chunk_entries - number of data entries per chunk *   * returns allocated structure or 0L for error. * */struct ftchash *ftchash_new(int h_size, int d_size, int key_size,  int chunk_entries){  struct ftchash *ftch;  int i;  /* allocate ftchash */  if (!(ftch = (struct ftchash*)malloc(sizeof (struct ftchash)))) {    fterr_warn("malloc()");    return ftch;  }  /* init */  bzero(ftch, sizeof (struct ftchash));  ftch->h_size = h_size;  ftch->d_size = d_size;  ftch->key_size = key_size;  ftch->chunk_size = chunk_entries * d_size;  FT_SLIST_INIT(&ftch->chunk_list);  /* allocate h_size buckets */  if (!(ftch->buckets = (struct ftchash_bhead*)malloc(    sizeof (struct ftchash_bhead)*h_size))) {    fterr_warn("malloc()");    free (ftch);    return (struct ftchash*)0L;  }  /* init buckets */  for (i = 0; i < h_size; ++i)    FT_SLIST_INIT(&(*ftch).buckets[i]);  return ftch;} /* ftchash_new *//* * function: ftchash_free * *   free storage allocated with ftchash_new */void ftchash_free(struct ftchash *ftch){  struct ftchash_chunk *chunk;  if (ftch) {    if (ftch->buckets)      free (ftch->buckets);    if (ftch->sorted_recs)      free (ftch->sorted_recs);    while ((chunk = FT_SLIST_FIRST(&ftch->chunk_list))) {      FT_SLIST_REMOVE_HEAD(&ftch->chunk_list, chain);      free (chunk->base);      free (chunk);    }     free (ftch);  }} /* ftchash_free *//* * function: ftchash_lookup * *   lookup record in hash table * *   returns pointer to record found or *           *0L if not found */void *ftchash_lookup(struct ftchash *ftch, void *key, u_int32 hash){  struct ftchash_rec_gen *rec;  struct ftchash_bhead *bhead;  int keyoff;  /* offset to key */  keyoff = offsetof(struct ftchash_rec_gen, data);  /* lookup hash entry */  bhead = &(*ftch).buckets[hash];  /* walk down chain */  FT_SLIST_FOREACH(rec, bhead, chain) {    /* if found return pointer */    if (!bcmp((char*)rec+keyoff, (char*)key, ftch->key_size))      return rec;  }  return (void*)0L;} /* ftchash_lookup *//* * function: ftchash_update * *   add record to hash table.  key_size bytes will be copied from rec to *   the allocated hash record.  The caller must update the remaining *   area of rec.  hash value must be less than h_size. * *   returns 0L on error *           or pointer to allocated record */void *ftchash_update(struct ftchash *ftch, void *newrec, u_int32 hash){  struct ftchash_rec_gen *rec;  struct ftchash_bhead *bhead;  int keyoff;  /* no longer sorted */  ftch->sort_flags &= ~FT_CHASH_SORTED;  /* offset to key */  keyoff = offsetof(struct ftchash_rec_gen, data);  /* lookup hash entry */  bhead = &(*ftch).buckets[hash];  /* walk down chain */  FT_SLIST_FOREACH(rec, bhead, chain) {    /* if found return pointer */    if (!bcmp((char*)rec+keyoff, (char*)newrec+keyoff, ftch->key_size))      return rec;  }  /* not found, allocate new entry */  if (!(rec = (struct ftchash_rec_gen*) ftchash_alloc_rec(ftch))) {    fterr_warnx("ftchash_alloc_rec(): failed");    return (void*)0L;  }  /* add to chain */  FT_SLIST_INSERT_HEAD(bhead, rec, chain);  /* copy in key */  bcopy((char*)newrec+keyoff, (char*)rec+keyoff, ftch->key_size);  /* increment storage counter */  ftch->entries ++;  /* return new record pointer */  return rec;} /* ftchash_update *//* * function: ftchash_alloc_rec * *   allocate a new record * *   chunk pointer is added to ftch->chunk_list when adding new chunk * *   a chunk will always contain at least 1 record * *   returns 0L on error *           or pointer to allocated record */void *ftchash_alloc_rec(struct ftchash *ftch){  void *p;  struct ftchash_chunk *chunk;  if ((!ftch->active_chunk) || (ftch->active_chunk->next >= ftch->chunk_size)) {    /* allocate the chunk */    if (!(p = malloc(ftch->chunk_size))) {      fterr_warnx("malloc()");      return (void*)0L;    }    bzero(p, ftch->chunk_size);    /* allocate the chunk holder */    if (!(chunk = (struct ftchash_chunk*)malloc(      sizeof (struct ftchash_chunk)))) {      fterr_warnx("malloc()");      free (p);      return (void*)0L;    }    bzero(chunk, sizeof (struct ftchash_chunk));    chunk->base = p;    ftch->active_chunk = chunk;    FT_SLIST_INSERT_HEAD(&ftch->chunk_list, chunk, chain);  }  p = (char*)ftch->active_chunk->base + ftch->active_chunk->next;  ftch->active_chunk->next += ftch->d_size;  return p;} /* ftchash_alloc_rec *//* * function: ftchash_first * * setup ftchash_foreach to first entry; */void ftchash_first(struct ftchash *ftch){  struct ftchash_chunk *chunk;  if (ftch->sort_flags & FT_CHASH_SORTED) {    if (ftch->sort_flags & FT_CHASH_SORT_ASCENDING)      ftch->traverse_srec = ftch->entries;    else      ftch->traverse_srec = 0;  } else {    chunk = FT_SLIST_FIRST(&ftch->chunk_list);    if (chunk) {      ftch->traverse_chunk = chunk;      ftch->traverse_rec = chunk->base;    } else {      ftch->traverse_rec = (void*)0L;      ftch->traverse_chunk = (void*)0L;    }  } /* sorted? */} /* ftchash_first *//* * function: ftchash_foreach * * returns next entry in hash table, or NULL if the last entry * ftchash_first() must be called first. * */void *ftchash_foreach(struct ftchash *ftch){  struct ftchash_chunk *chunk;  void *ret;  if (ftch->sort_flags & FT_CHASH_SORTED) {    if (ftch->sort_flags & FT_CHASH_SORT_ASCENDING) {      if (ftch->traverse_srec > 0)        return (ftch->sorted_recs[--ftch->traverse_srec]);      else        return (void*)0L;    } else {      if (ftch->traverse_srec < ftch->entries)        return (ftch->sorted_recs[ftch->traverse_srec++]);      else        return (void*)0L;    }  } else {    /* only happens on empty hash table -- done */    if (!ftch->traverse_chunk)      return (void*)0L;             /* more entries in this chunk *? */     if  ((char*)ftch->traverse_rec <      (char*)ftch->traverse_chunk->base+ftch->traverse_chunk->next) {      ret = ftch->traverse_rec;      (char*)ftch->traverse_rec += ftch->d_size;      return ret;    } else {        /* go to next chunk */        chunk = FT_SLIST_NEXT(ftch->traverse_chunk, chain);        /* if this is a valid chunk, return first record */        if (chunk) {          ftch->traverse_chunk = chunk;          ftch->traverse_rec = (char*)ftch->traverse_chunk->base + ftch->d_size;          return (chunk->base);        } else { /* else that was the last chunk, done */          return (void*)0L;        }    }  } /* sorted? */} /* ftchash_foreach *//* * function: ftchash_sort * *   creates an array of pointers to the sorted records * *   returns -1 on error *            0 otherwise */int ftchash_sort(struct ftchash *ftch, int offset, int flags){  void *rec;  u_int64 x;  /* free memory from previous call */  if (ftch->sorted_recs)    free(ftch->sorted_recs);  /* allocate ftch->entries * sizeof 32 bit pointer */  if (!(ftch->sorted_recs = (struct ftchash_rec_gen**)    malloc(sizeof (struct ftchash_rec_gen*)*ftch->entries))) {    fterr_warn("malloc()");    return -1;  }  ftch->sort_flags = flags;  /* copy in the unsorted entries */  ftchash_first(ftch);  x = 0;  while ((rec = ftchash_foreach(ftch))) {    ftch->sorted_recs[x++] = (struct ftchash_rec_gen*)rec;  } /* while */  sort_offset = offset;  if (flags & FT_CHASH_SORT_64)    qsort(ftch->sorted_recs, ftch->entries, sizeof (void*), cmp64);  else if (flags & FT_CHASH_SORT_40)    qsort(ftch->sorted_recs, ftch->entries, sizeof (void*), cmp40);  else if (flags & FT_CHASH_SORT_32)    qsort(ftch->sorted_recs, ftch->entries, sizeof (void*), cmp32);  else if (flags & FT_CHASH_SORT_16)    qsort(ftch->sorted_recs, ftch->entries, sizeof (void*), cmp16);  else if (flags & FT_CHASH_SORT_8)    qsort(ftch->sorted_recs, ftch->entries, sizeof (void*), cmp8);  else if (flags & FT_CHASH_SORT_DOUBLE)    qsort(ftch->sorted_recs, ftch->entries, sizeof (void*), cmp_double);  else    fterr_errx(1, "ftchash_sort(): internal error");  ftch->sort_flags |= FT_CHASH_SORTED;  return 0;} /* ftchash_sort */static int cmp64(const void *a, const void *b){  register u_int64 *la, *lb;  char *d;  d = *(char**)a;  la = (u_int64*)(d+sort_offset);  d = *(char**)b;  lb = (u_int64*)(d+sort_offset);  if (*la < *lb)    return -1;  if (*la > *lb)    return 1;  return 0;} /* cmp64 */static int cmp40(const void *a, const void *b){  register u_int32 *la, *lb;  register u_int8 *ca, *cb;  register char *d;  d = *(char**)a;  la = (u_int32*)(d+sort_offset);  d = *(char**)b;  lb = (u_int32*)(d+sort_offset);  if (*la < *lb)    return -1;  if (*la > *lb)    return 1;  d = *(char**)a;  ca = (u_int8*)(d+sort_offset+4);  d = *(char**)b;  cb = (u_int8*)(d+sort_offset+4);    if (*ca < *cb)    return -1;  if (*ca > *cb)    return 1;    return 0;} /* cmp40 */static int cmp32(const void *a, const void *b){  register u_int32 *la, *lb;  char *d;  d = *(char**)a;  la = (u_int32*)(d+sort_offset);  d = *(char**)b;  lb = (u_int32*)(d+sort_offset);  if (*la < *lb)    return -1;  if (*la > *lb)    return 1;  return 0;} /* cmp32 */static int cmp16(const void *a, const void *b){  register u_int16 *la, *lb;  char *d;  d = *(char**)a;  la = (u_int16*)(d+sort_offset);  d = *(char**)b;  lb = (u_int16*)(d+sort_offset);  if (*la < *lb)    return -1;  if (*la > *lb)    return 1;  return 0;} /* cmp16 */static int cmp8(const void *a, const void *b){  register u_int8 *la, *lb;  char *d;  d = *(char**)a;  la = (u_int8*)(d+sort_offset);  d = *(char**)b;  lb = (u_int8*)(d+sort_offset);  if (*la < *lb)    return -1;  if (*la > *lb)    return 1;  return 0;} /* cmp8 */static int cmp_double(const void *a, const void *b){  register double *la, *lb;  char *d;  d = *(char**)a;  la = (double*)(d+sort_offset);  d = *(char**)b;  lb = (double*)(d+sort_offset);  if (*la < *lb)    return -1;  if (*la > *lb)    return 1;  return 0;} /* cmp_double */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人在线免费| 国产精品免费久久| 欧美日韩二区三区| 日韩精品一区国产麻豆| 国产色爱av资源综合区| 亚洲一区二区四区蜜桃| 另类中文字幕网| 91在线观看污| 99这里只有久久精品视频| 欧美精品v国产精品v日韩精品| 精品国产乱码久久久久久久久| 国产精品久久福利| 美国十次了思思久久精品导航| 成人av网站在线观看| 欧美一二三区在线观看| 亚洲一区二区三区影院| 777午夜精品免费视频| 亚洲精选免费视频| 国产剧情一区在线| 精品视频一区 二区 三区| 中文字幕第一区综合| 国产伦精一区二区三区| 欧美一级免费观看| 亚洲精品日韩专区silk| 欧美日韩亚洲综合一区二区三区| 久久99精品久久久久久动态图| 欧美日韩你懂的| 国产在线麻豆精品观看| 2021久久国产精品不只是精品| 婷婷国产在线综合| 在线视频综合导航| 日韩一区有码在线| 国产成人h网站| 视频在线观看一区二区三区| 亚洲男帅同性gay1069| 一本一本大道香蕉久在线精品| 欧美一区二区三区日韩视频| 久久av老司机精品网站导航| 中文字幕亚洲不卡| 欧美成人乱码一区二区三区| 蜜桃视频在线观看一区| 中文字幕在线一区免费| 久久午夜羞羞影院免费观看| 在线免费观看一区| 国产不卡高清在线观看视频| 久久这里都是精品| 欧美日韩国产一二三| 成人污污视频在线观看| 国产精品不卡在线观看| 精品国产免费视频| 欧美日韩国产首页| 91麻豆免费视频| 国产一区二区三区精品视频| 香蕉乱码成人久久天堂爱免费| 欧美精品vⅰdeose4hd| 成人av网址在线| 天堂蜜桃91精品| 亚洲精选在线视频| 久久亚洲精华国产精华液 | 日韩一区二区在线观看视频 | 宅男噜噜噜66一区二区66| 国产精品一区二区免费不卡 | av在线播放一区二区三区| 亚洲视频电影在线| 男人操女人的视频在线观看欧美 | 一区二区三区精密机械公司| 欧美电影在哪看比较好| 国产肉丝袜一区二区| 欧美一区二区精品| eeuss鲁一区二区三区| 99精品在线观看视频| 久久99精品久久久久久| 亚洲成av人片在线观看无码| 国产亚洲综合性久久久影院| 欧美精品丝袜中出| 在线观看国产精品网站| 成人在线综合网| 国产精品91一区二区| 麻豆成人综合网| 激情综合网天天干| 99久久久久免费精品国产| 亚洲另类一区二区| 国产精品美女久久久久aⅴ国产馆| 日韩一区二区在线观看| 亚洲国产成人午夜在线一区| 国产欧美日韩精品一区| 国产欧美一区二区精品秋霞影院| 精品国产不卡一区二区三区| 精品国产免费人成电影在线观看四季 | 久久爱另类一区二区小说| 奇米综合一区二区三区精品视频| 日韩高清不卡一区二区三区| 欧美一区二区三区成人| 日韩一区二区三区电影在线观看 | 中文字幕一区二区在线观看| 亚洲日本成人在线观看| 亚洲在线视频一区| 麻豆高清免费国产一区| 国产一区二区三区观看| jizzjizzjizz欧美| 91国产视频在线观看| 国产精品资源网| 成人综合婷婷国产精品久久| 色综合久久综合网| 欧美精品在线观看播放| 精品久久久久久亚洲综合网 | 激情综合色综合久久| 国产成人免费视频网站高清观看视频| 国产成人av一区| 日本韩国欧美在线| 日韩精品专区在线| 亚洲情趣在线观看| 日本va欧美va精品| 成人久久18免费网站麻豆 | 国产激情一区二区三区| 在线观看91视频| 精品国产乱码久久久久久蜜臀| 自拍偷自拍亚洲精品播放| 天天色综合天天| 丁香啪啪综合成人亚洲小说| 欧美日韩国产中文| 中文欧美字幕免费| 丝袜诱惑亚洲看片 | 欧美亚洲一区三区| av高清不卡在线| 9191国产精品| 国产精品久久久久久久久动漫| 丝袜诱惑亚洲看片| 91在线国产福利| 欧美精品一区二区三区在线播放| 亚洲一区二三区| 福利一区福利二区| 日韩欧美国产成人一区二区| 一区二区三区四区激情| 国产精品一区二区三区四区| 欧美精品久久99久久在免费线| 国产精品污网站| 美国三级日本三级久久99| 欧美亚洲一区二区在线观看| 国产精品免费人成网站| 韩国成人福利片在线播放| 在线综合+亚洲+欧美中文字幕| 综合久久综合久久| 国产mv日韩mv欧美| 日韩欧美国产三级电影视频| 亚洲国产精品一区二区久久恐怖片 | 国产v综合v亚洲欧| 日韩一区和二区| 亚洲18色成人| 欧美亚日韩国产aⅴ精品中极品| 国产精品卡一卡二卡三| 国产美女一区二区三区| 日韩欧美一级二级三级| 日韩va欧美va亚洲va久久| 欧美色爱综合网| 亚洲一区二区三区四区五区黄| 91麻豆swag| 亚洲色欲色欲www| av不卡免费电影| 最新高清无码专区| www.亚洲色图.com| 国产精品日日摸夜夜摸av| 国产二区国产一区在线观看| 精品久久一区二区| 理论片日本一区| 久久综合久久鬼色| 国产麻豆视频一区| 国产欧美日韩一区二区三区在线观看| 久久9热精品视频| 亚洲精品一区二区三区精华液| 国内精品免费在线观看| 久久精品视频免费观看| 成人一区二区三区视频| 国产精品日韩成人| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 亚洲三级理论片| 日本韩国视频一区二区| 亚洲gay无套男同| 91精品国产高清一区二区三区| 午夜精品福利在线| 日韩一区二区三区在线观看| 久久av中文字幕片| 中文在线一区二区| 色婷婷狠狠综合| 日韩av午夜在线观看| 欧美大黄免费观看| 成人精品视频.| 亚洲国产日韩精品| 欧美va在线播放| 成人aaaa免费全部观看| 亚洲午夜精品一区二区三区他趣| 欧美日韩一区小说| 久久国产精品区| 国产精品国产精品国产专区不蜜 | 亚洲国产精品激情在线观看| 色婷婷亚洲综合| 久久精品国产99国产| 亚洲国产电影在线观看| 精品视频999| 国产a精品视频|