⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lookup.c

📁 harvest是一个下载html网页得机器人
💻 C
字号:
/* $Id: lookup.c,v 1.11 2002/08/02 19:26:55 adam Exp $   Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002   Index Data ApsThis file is part of the Zebra server.Zebra is free software; you can redistribute it and/or modify it underthe terms of the GNU General Public License as published by the FreeSoftware Foundation; either version 2, or (at your option) any laterversion.Zebra is distributed in the hope that it will be useful, but WITHOUT ANYWARRANTY; without even the implied warranty of MERCHANTABILITY orFITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public Licensefor more details.You should have received a copy of the GNU General Public Licensealong with Zebra; see the file LICENSE.zebra.  If not, write to theFree Software Foundation, 59 Temple Place - Suite 330, Boston, MA02111-1307, USA.*/#include <stdlib.h>#include <string.h>#include <stdio.h>#include <assert.h>#include <dict.h>static char *dict_look (Dict dict, const Dict_char *str, Dict_ptr ptr){    int mid, lo, hi;    int cmp;    void *p;    short *indxp;    char *info;    dict_bf_readp (dict->dbf, ptr, &p);    mid = lo = 0;    hi = DICT_nodir(p)-1;    indxp = (short*) ((char*) p+DICT_bsize(p)-sizeof(short));        while (lo <= hi)    {        mid = (lo+hi)/2;        if (indxp[-mid] > 0)        {            /* string (Dict_char *) DICT_EOS terminated */            /* unsigned char        length of information */            /* char *               information */            info = (char*)p + indxp[-mid];            cmp = dict_strcmp((Dict_char*) info, str);            if (!cmp)                return info+(dict_strlen ((Dict_char*) info)+1)                    *sizeof(Dict_char);        }        else        {            Dict_char dc;            Dict_ptr subptr;            /* Dict_ptr             subptr */            /* Dict_char            sub char */            /* unsigned char        length of information */            /* char *               information */            info = (char*)p - indxp[-mid];            memcpy (&dc, info+sizeof(Dict_ptr), sizeof(Dict_char));            cmp = dc- *str;            if (!cmp)            {                memcpy (&subptr, info, sizeof(Dict_ptr));                if (*++str == DICT_EOS)                {                    if (info[sizeof(Dict_ptr)+sizeof(Dict_char)])                        return info+sizeof(Dict_ptr)+sizeof(Dict_char);                    return NULL;                }                else                {                    if (subptr == 0)                        return NULL;                    ptr = subptr;                    dict_bf_readp (dict->dbf, ptr, &p);                    mid = lo = 0;                    hi = DICT_nodir(p)-1;                    indxp = (short*) ((char*) p+DICT_bsize(p)-sizeof(short));                    continue;                }            }        }        if (cmp < 0)            lo = mid+1;        else            hi = mid-1;    }    return NULL;}char *dict_lookup (Dict dict, const char *p){    if (!dict->head.root)        return NULL;    return dict_look (dict, (const Dict_char *) p, dict->head.root);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -