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

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

?? hcache.c

?? Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
?? C
字號:
/* * This file has been donated to Jam. */# include "jam.h"# include "lists.h"# include "parse.h"# include "rules.h"# include "regexp.h"# include "headers.h"# include "newstr.h"# include "hash.h"# include "hcache.h"# include "variable.h"# include "search.h"#ifdef OPT_HEADER_CACHE_EXT/* * Craig W. McPheeters, Alias|Wavefront. * * hcache.c hcache.h - handle cacheing of #includes in source files * * Create a cache of files scanned for headers.  When starting jam, * look for the cache file and load it if present.  When finished the * binding phase, create a new header cache.  The cache contains * files, their timestamps and the header files found in their scan. * During the binding phase of jam, look in the header cache first for * the headers contained in a file.  If the cache is present and * valid, use its contents.  This results in dramatic speedups with * large projects (eg. 3min -> 1min startup for one project.) * * External routines: *    hcache_init() - read and parse the local .jamdeps file. *    hcache_done() - write a new .jamdeps file *    hcache() - return list of headers on target.  Use cache or do a scan. *     * The dependency file format is an ascii file with 1 line per target. * Each line has the following fields: * @boundname@ timestamp @file@ @file@ @file@ ... \n * */struct hcachedata {    char		*boundname;    time_t		time;    LIST		*includes;    LIST		*hdrscan; /* the HDRSCAN value for this target */    int			age;	/* if too old, we'll remove it from cache */    struct hcachedata	*next;} ;typedef struct hcachedata HCACHEDATA ;static struct hash *hcachehash = 0;static HCACHEDATA  *hcachelist = 0; static int queries = 0;static int hits = 0;#define CACHE_FILE_VERSION "version 4"#define CACHE_RECORD_HEADER "header"#define CACHE_RECORD_END "end"/* * Return the name of the header cache file.  May return NULL. * * The user sets this by setting the HCACHEFILE variable in a Jamfile. * We cache the result so the user can't change the cache file during * header scanning. */static char*cache_name(void){    static char* name = 0;    if (!name) {	LIST *hcachevar = var_get("HCACHEFILE");	if (hcachevar) {	    TARGET *t = bindtarget( hcachevar->string );	    pushsettings( t->settings );        /* Don't expect cache file to be generated, so pass 0           as third argument to search. */	    t->boundname = search( t->name, &t->time, 0 );	    popsettings( t->settings );	    if (hcachevar) {		name = copystr(t->boundname);	    }	}    }    return name;}/* * Return the maximum age a cache entry can have before it is purged * from the cache. */static intcache_maxage(void){    int age = 100;    LIST *var = var_get("HCACHEMAXAGE");    if (var) {	age = atoi(var->string);	if (age < 0)	    age = 0;    }    return age;}/* * Read a netstring.  The caveat is that the string can't contain * ASCII 0.  The returned value is as returned by newstr(), so it need * not be freed. */char*read_netstring(FILE* f){    unsigned long len;    static char* buf = NULL;    static unsigned long buf_len = 0;    if (fscanf(f, " %9lu", &len) != 1)	return NULL;    if (fgetc(f) != (int)'\t')	return NULL;    if (len > 1024 * 64)	return NULL;		/* sanity check */    if (len > buf_len)    {	unsigned long new_len = buf_len * 2;	if (new_len < len)	    new_len = len;	buf = (char*)BJAM_REALLOC(buf, new_len + 1);	if (buf)	    buf_len = new_len;    }    if (!buf)	return NULL;    if (fread(buf, 1, len, f) != len)	return NULL;    if (fgetc(f) != (int)'\n')	return NULL;    buf[len] = 0;    return newstr(buf);}/* * Write a netstring. */voidwrite_netstring(FILE* f, const char* s){    if (!s)	s = "";    fprintf(f, "%lu\t%s\n", strlen(s), s);}voidhcache_init(){    HCACHEDATA  cachedata, *c;    FILE	*f;    char	*version;    int		header_count = 0;    char*	hcachename;    hcachehash = hashinit (sizeof (HCACHEDATA), "hcache");    if (! (hcachename = cache_name()))	return;    if (! (f = fopen (hcachename, "rb" )))	return;        version = read_netstring(f);    if (!version || strcmp(version, CACHE_FILE_VERSION)) {	fclose(f);	return;    }    while (1)    {	char* record_type;	char *time_str;	char *age_str;	char *includes_count_str;	char *hdrscan_count_str;	int i, count;	LIST *l;	record_type = read_netstring(f);	if (!record_type) {	    fprintf(stderr, "invalid %s\n", hcachename);	    goto bail;	}	if (!strcmp(record_type, CACHE_RECORD_END)) {	    break;	}	if (strcmp(record_type, CACHE_RECORD_HEADER)) {	    fprintf(stderr, "invalid %s with record separator <%s>\n",		    hcachename, record_type ? record_type : "<null>");	    goto bail;	}		c = &cachedata;	    	c->boundname = read_netstring(f);	time_str = read_netstring(f);	age_str = read_netstring(f);	includes_count_str = read_netstring(f);		if (!c->boundname || !time_str || !age_str	    || !includes_count_str)	{	    fprintf(stderr, "invalid %s\n", hcachename);	    goto bail;	}	c->time = atoi(time_str);	c->age = atoi(age_str) + 1;	count = atoi(includes_count_str);	for (l = 0, i = 0; i < count; i++) {	    char* s = read_netstring(f);	    if (!s) {		fprintf(stderr, "invalid %s\n", hcachename);		goto bail;	    }	    l = list_new(l, s);	}	c->includes = l;	hdrscan_count_str = read_netstring(f);	if (!includes_count_str) {	    list_free(c->includes);	    fprintf(stderr, "invalid %s\n", hcachename);	    goto bail;	}	count = atoi(hdrscan_count_str);	for (l = 0, i = 0; i < count; i++) {	    char* s = read_netstring(f);	    if (!s) {		fprintf(stderr, "invalid %s\n", hcachename);		goto bail;	    }	    l = list_new(l, s);	}	c->hdrscan = l;	if (!hashenter(hcachehash, (HASHDATA **)&c)) {	    fprintf(stderr, "can't insert header cache item, bailing on %s\n",		    hcachename);	    goto bail;	}	c->next = hcachelist;	hcachelist = c;	header_count++;    }    if (DEBUG_HEADER) {	printf("hcache read from file %s\n", hcachename);    }     bail:    fclose(f);}voidhcache_done(){    FILE	*f;    HCACHEDATA  *c;    int 	header_count = 0;    char*	hcachename;    int		maxage;        if (!hcachehash)	return;    if (! (hcachename = cache_name()))	return;    if (! (f = fopen (hcachename, "wb" )))	return;    maxage = cache_maxage();    /* print out the version */    write_netstring(f, CACHE_FILE_VERSION);    c = hcachelist;    for (c = hcachelist; c; c = c->next) {	LIST	*l;	char time_str[30];	char age_str[30];	char includes_count_str[30];	char hdrscan_count_str[30];	if (maxage == 0)	    c->age = 0;	else if (c->age > maxage)	    continue;	sprintf(includes_count_str, "%lu", list_length(c->includes));	sprintf(hdrscan_count_str, "%lu", list_length(c->hdrscan));	sprintf(time_str, "%lu", c->time);	sprintf(age_str, "%lu", c->age);	write_netstring(f, CACHE_RECORD_HEADER);	write_netstring(f, c->boundname);	write_netstring(f, time_str);	write_netstring(f, age_str);	write_netstring(f, includes_count_str);	for (l = c->includes; l; l = list_next(l)) {	    write_netstring(f, l->string);	}	write_netstring(f, hdrscan_count_str);	for (l = c->hdrscan; l; l = list_next(l)) {	    write_netstring(f, l->string);	}	fputs("\n", f);	header_count++;    }    write_netstring(f, CACHE_RECORD_END);    if (DEBUG_HEADER) {	printf("hcache written to %s.   %d dependencies, %.0f%% hit rate\n",	       hcachename, header_count,	       queries ? 100.0 * hits / queries : 0);    }    fclose (f);}LIST *hcache (TARGET *t, int rec, regexp *re[], LIST *hdrscan){    HCACHEDATA  cachedata, *c = &cachedata;    LIST 	*l = 0;    ++queries;    c->boundname = t->boundname;    if (hashcheck (hcachehash, (HASHDATA **) &c))    {	if (c->time == t->time)	{	    LIST *l1 = hdrscan, *l2 = c->hdrscan;	    while (l1 && l2) {		if (l1->string != l2->string) {		    l1 = NULL;		} else {		    l1 = list_next(l1);		    l2 = list_next(l2);		}	    }	    if (l1 || l2) {		if (DEBUG_HEADER)		    printf("HDRSCAN out of date in cache for %s\n",			   t->boundname);		printf("HDRSCAN out of date for %s\n", t->boundname);		printf(" real  : ");		list_print(hdrscan);		printf("\n cached: ");		list_print(c->hdrscan);		printf("\n");		list_free(c->includes);		list_free(c->hdrscan);		c->includes = 0;		c->hdrscan = 0;	    } else {		if (DEBUG_HEADER)		    printf ("using header cache for %s\n", t->boundname);		c->age = 0;		++hits;		l = list_copy (0, c->includes);		return l;	    }	} else {	    if (DEBUG_HEADER)	        printf ("header cache out of date for %s\n", t->boundname);	    list_free (c->includes);	    list_free(c->hdrscan);	    c->includes = 0;	    c->hdrscan = 0;	}    } else {	if (hashenter (hcachehash, (HASHDATA **)&c)) {	    c->boundname = newstr (c->boundname);	    c->next = hcachelist;	    hcachelist = c;	}    }    /* 'c' points at the cache entry.  Its out of date. */    l = headers1 (0, t->boundname, rec, re);    c->time = t->time;    c->age = 0;    c->includes = list_copy (0, l);    c->hdrscan = list_copy(0, hdrscan);    return l;}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91在线观看污| 日韩毛片在线免费观看| 国产精品色哟哟网站| 视频一区中文字幕国产| 成人av免费网站| 欧美刺激午夜性久久久久久久| 国产欧美一区二区精品忘忧草| 视频在线观看一区| 色综合久久久久综合99| 欧美国产乱子伦| 国内精品视频一区二区三区八戒 | 男人的天堂久久精品| av午夜一区麻豆| 国产亚洲精品aa| 日韩1区2区日韩1区2区| 在线亚洲欧美专区二区| 国产精品白丝在线| 国产精品白丝jk白祙喷水网站| 91精品黄色片免费大全| 亚洲影院理伦片| 色综合婷婷久久| 国产精品国产三级国产普通话三级| 一本大道久久a久久综合| 国产精品久久久久久久久图文区| 韩国成人在线视频| 久久久噜噜噜久噜久久综合| 日本va欧美va精品发布| 91超碰这里只有精品国产| 亚洲一区二区三区在线| 欧美亚洲综合在线| 亚洲成人资源在线| 欧美日精品一区视频| 亚洲福利视频一区二区| 欧美丝袜丝nylons| 五月天激情综合网| 91精品国产综合久久久久| 欧美96一区二区免费视频| 欧美一区二区在线看| 麻豆精品一二三| 欧美电视剧在线看免费| 国内精品国产成人| 国产拍欧美日韩视频二区| 福利一区二区在线| 亚洲欧洲av色图| 在线观看不卡一区| 青青草视频一区| 久久综合九色综合欧美就去吻| 国精产品一区一区三区mba桃花| 久久综合色8888| a美女胸又www黄视频久久| 一区二区三区在线视频播放 | 国产一区在线不卡| 国产精品少妇自拍| 一本一本大道香蕉久在线精品| 一区二区三区日韩精品视频| 在线成人午夜影院| 国产一区二区视频在线| 自拍偷在线精品自拍偷无码专区| 欧美在线一区二区三区| 久久精工是国产品牌吗| 国产精品免费视频一区| 欧美色图一区二区三区| 国产精品综合av一区二区国产馆| 国产精品麻豆一区二区 | 成年人午夜久久久| 亚洲亚洲精品在线观看| 欧美成人一区二区三区| 91免费版在线看| 婷婷开心激情综合| 日本一区二区成人| 在线不卡中文字幕| 不卡电影一区二区三区| 日本一道高清亚洲日美韩| 日本一区二区三级电影在线观看| 欧美羞羞免费网站| 国产999精品久久| 人人超碰91尤物精品国产| 国产精品高清亚洲| 精品免费国产二区三区| 精品视频在线视频| 高清免费成人av| 免费视频最近日韩| 亚洲在线一区二区三区| 国产欧美视频一区二区三区| 欧美日韩卡一卡二| av中文字幕一区| 国产一区 二区| 日本在线不卡视频| 亚洲午夜激情网页| 中文字幕一区二区三区在线播放 | 亚洲午夜一二三区视频| 国产欧美在线观看一区| 91麻豆精品国产无毒不卡在线观看 | 一本到不卡免费一区二区| 国产一区在线看| 美腿丝袜在线亚洲一区| 亚洲自拍偷拍av| 亚洲乱码中文字幕综合| 国产欧美日韩久久| 欧美va亚洲va香蕉在线| 制服视频三区第一页精品| 一本一道久久a久久精品| 不卡一区在线观看| 国产精品一区二区三区乱码| 六月丁香婷婷色狠狠久久| 五月激情六月综合| 亚洲福利国产精品| 婷婷一区二区三区| 亚洲国产精品欧美一二99| 亚洲尤物视频在线| 亚洲综合激情另类小说区| 亚洲婷婷在线视频| 一区二区三区**美女毛片| 亚洲精品免费看| 亚洲午夜免费视频| 午夜精品福利一区二区蜜股av| 亚洲成人在线网站| 日本最新不卡在线| 精品一区二区三区欧美| 韩国精品主播一区二区在线观看 | 亚洲男人天堂一区| 一区二区三区美女| 亚洲成av人片| 青青国产91久久久久久| 蜜臀av性久久久久蜜臀aⅴ四虎| 强制捆绑调教一区二区| 蜜桃视频一区二区| 激情文学综合丁香| 成人久久18免费网站麻豆| thepron国产精品| 一本色道久久综合亚洲aⅴ蜜桃 | 欧美一区二区精品| 久久婷婷国产综合国色天香| 久久久久久久久久久久电影| 中文字幕第一区| 一区二区三区四区高清精品免费观看 | 亚洲va国产va欧美va观看| 日韩中文字幕av电影| 久久99精品久久只有精品| 成人综合婷婷国产精品久久免费| 91女人视频在线观看| 欧美日韩精品福利| 久久看人人爽人人| 亚洲免费观看高清| 麻豆精品视频在线观看| 风流少妇一区二区| 欧美色图天堂网| 久久久精品一品道一区| 亚洲自拍另类综合| 国内成人精品2018免费看| 91在线高清观看| 欧美大片在线观看一区二区| 一区精品在线播放| 男女男精品视频| 99国产精品视频免费观看| 666欧美在线视频| 中文字幕亚洲欧美在线不卡| 日本不卡123| 91网页版在线| 精品国产sm最大网站| 亚洲一区二区三区中文字幕 | 亚洲va国产天堂va久久en| 国产一区二区女| 欧美视频完全免费看| 欧美国产成人精品| 麻豆专区一区二区三区四区五区| 99精品久久99久久久久| 精品国产一区二区三区忘忧草| 亚洲裸体在线观看| 高清国产一区二区三区| 7878成人国产在线观看| 日韩理论片一区二区| 国产一区二区女| 日韩一区二区三区av| 一区二区在线观看免费视频播放 | 丁香婷婷综合网| 日韩一区二区三区视频| 亚洲影院理伦片| 色综合网站在线| 国产精品网站在线播放| 国产乱人伦偷精品视频免下载| 欧美精品第1页| 亚洲综合自拍偷拍| 91麻豆国产在线观看| 国产精品对白交换视频| 国产宾馆实践打屁股91| 久久日韩粉嫩一区二区三区| 色久优优欧美色久优优| 亚洲国产成人午夜在线一区| 极品少妇一区二区| 日韩视频一区二区| 日韩1区2区日韩1区2区| 日韩一区二区三| 麻豆91免费看| 精品卡一卡二卡三卡四在线| 免费看黄色91| 久久尤物电影视频在线观看| 免费在线观看视频一区| 日韩一区二区免费电影| 久久精品国产精品亚洲红杏|