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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? cordxtra.c

?? Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * Copyright (c) 1993-1994 by Xerox Corporation.  All rights reserved. * * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK. * * Permission is hereby granted to use or copy this program * for any purpose,  provided the above notices are retained on all copies. * Permission to modify the code and to distribute modified code is granted, * provided the above notices are retained, and a notice that the code was * modified is included with the above copyright notice. * * Author: Hans-J. Boehm (boehm@parc.xerox.com) *//* * These are functions on cords that do not need to understand their * implementation.  They serve also serve as example client code for * cord_basics. *//* Boehm, December 8, 1995 1:53 pm PST */# include <stdio.h># include <string.h># include <stdlib.h># include <stdarg.h># include "cord.h"# include "ec.h"# define I_HIDE_POINTERS	/* So we get access to allocation lock.	*/				/* We use this for lazy file reading, 	*/				/* so that we remain independent 	*/				/* of the threads primitives.		*/# include "gc.h"/* For now we assume that pointer reads and writes are atomic, 	*//* i.e. another thread always sees the state before or after	*//* a write.  This might be false on a Motorola M68K with	*//* pointers that are not 32-bit aligned.  But there probably	*//* aren't too many threads packages running on those.		*/# define ATOMIC_WRITE(x,y) (x) = (y)# define ATOMIC_READ(x) (*(x))/* The standard says these are in stdio.h, but they aren't always: */# ifndef SEEK_SET#   define SEEK_SET 0# endif# ifndef SEEK_END#   define SEEK_END 2# endif# define BUFSZ 2048	/* Size of stack allocated buffers when		*/			/* we want large buffers.			*/typedef void (* oom_fn)(void);# define OUT_OF_MEMORY {  if (CORD_oom_fn != (oom_fn) 0) (*CORD_oom_fn)(); \			  ABORT("Out of memory\n"); }# define ABORT(msg) { fprintf(stderr, "%s\n", msg); abort(); }CORD CORD_cat_char(CORD x, char c){    register char * string;        if (c == '\0') return(CORD_cat(x, CORD_nul(1)));    string = GC_MALLOC_ATOMIC(2);    if (string == 0) OUT_OF_MEMORY;    string[0] = c;    string[1] = '\0';    return(CORD_cat_char_star(x, string, 1));}CORD CORD_catn(int nargs, ...){    register CORD result = CORD_EMPTY;    va_list args;    register int i;    va_start(args, nargs);    for (i = 0; i < nargs; i++) {        register CORD next = va_arg(args, CORD);        result = CORD_cat(result, next);    }    va_end(args);    return(result);}typedef struct {	size_t len;	size_t count;	char * buf;} CORD_fill_data;int CORD_fill_proc(char c, void * client_data){    register CORD_fill_data * d = (CORD_fill_data *)client_data;    register size_t count = d -> count;        (d -> buf)[count] = c;    d -> count = ++count;    if (count >= d -> len) {    	return(1);    } else {    	return(0);    }}int CORD_batched_fill_proc(const char * s, void * client_data){    register CORD_fill_data * d = (CORD_fill_data *)client_data;    register size_t count = d -> count;    register size_t max = d -> len;    register char * buf = d -> buf;    register const char * t = s;        while((buf[count] = *t++) != '\0') {        count++;        if (count >= max) {            d -> count = count;            return(1);        }    }    d -> count = count;    return(0);}/* Fill buf with len characters starting at i.  			*//* Assumes len characters are available.				*/ void CORD_fill_buf(CORD x, size_t i, size_t len, char * buf){    CORD_fill_data fd;        fd.len = len;    fd.buf = buf;    fd.count = 0;    (void)CORD_iter5(x, i, CORD_fill_proc, CORD_batched_fill_proc, &fd);}int CORD_cmp(CORD x, CORD y){    CORD_pos xpos;    CORD_pos ypos;    register size_t avail, yavail;        if (y == CORD_EMPTY) return(x != CORD_EMPTY);    if (x == CORD_EMPTY) return(-1);    if (CORD_IS_STRING(y) && CORD_IS_STRING(x)) return(strcmp(x,y));    CORD_set_pos(xpos, x, 0);    CORD_set_pos(ypos, y, 0);    for(;;) {        if (!CORD_pos_valid(xpos)) {            if (CORD_pos_valid(ypos)) {            	return(-1);            } else {                return(0);            }        }        if (!CORD_pos_valid(ypos)) {            return(1);        }        if ((avail = CORD_pos_chars_left(xpos)) <= 0            || (yavail = CORD_pos_chars_left(ypos)) <= 0) {            register char xcurrent = CORD_pos_fetch(xpos);            register char ycurrent = CORD_pos_fetch(ypos);            if (xcurrent != ycurrent) return(xcurrent - ycurrent);            CORD_next(xpos);            CORD_next(ypos);        } else {            /* process as many characters as we can	*/            register int result;                        if (avail > yavail) avail = yavail;            result = strncmp(CORD_pos_cur_char_addr(xpos),            		     CORD_pos_cur_char_addr(ypos), avail);            if (result != 0) return(result);            CORD_pos_advance(xpos, avail);            CORD_pos_advance(ypos, avail);        }    }}int CORD_ncmp(CORD x, size_t x_start, CORD y, size_t y_start, size_t len){    CORD_pos xpos;    CORD_pos ypos;    register size_t count;    register long avail, yavail;        CORD_set_pos(xpos, x, x_start);    CORD_set_pos(ypos, y, y_start);    for(count = 0; count < len;) {        if (!CORD_pos_valid(xpos)) {            if (CORD_pos_valid(ypos)) {            	return(-1);            } else {                return(0);            }        }        if (!CORD_pos_valid(ypos)) {            return(1);        }        if ((avail = CORD_pos_chars_left(xpos)) <= 0            || (yavail = CORD_pos_chars_left(ypos)) <= 0) {            register char xcurrent = CORD_pos_fetch(xpos);            register char ycurrent = CORD_pos_fetch(ypos);            if (xcurrent != ycurrent) return(xcurrent - ycurrent);            CORD_next(xpos);            CORD_next(ypos);            count++;        } else {            /* process as many characters as we can	*/            register int result;                        if (avail > yavail) avail = yavail;            count += avail;            if (count > len) avail -= (count - len);            result = strncmp(CORD_pos_cur_char_addr(xpos),            		     CORD_pos_cur_char_addr(ypos), (size_t)avail);            if (result != 0) return(result);            CORD_pos_advance(xpos, (size_t)avail);            CORD_pos_advance(ypos, (size_t)avail);        }    }    return(0);}char * CORD_to_char_star(CORD x){    register size_t len = CORD_len(x);    char * result = GC_MALLOC_ATOMIC(len + 1);        if (result == 0) OUT_OF_MEMORY;    CORD_fill_buf(x, 0, len, result);    result[len] = '\0';    return(result);}CORD CORD_from_char_star(const char *s){    char * result;    size_t len = strlen(s);    if (0 == len) return(CORD_EMPTY);    result = GC_MALLOC_ATOMIC(len + 1);    if (result == 0) OUT_OF_MEMORY;    memcpy(result, s, len+1);    return(result);}const char * CORD_to_const_char_star(CORD x){    if (x == 0) return("");    if (CORD_IS_STRING(x)) return((const char *)x);    return(CORD_to_char_star(x));}char CORD_fetch(CORD x, size_t i){    CORD_pos xpos;        CORD_set_pos(xpos, x, i);    if (!CORD_pos_valid(xpos)) ABORT("bad index?");    return(CORD_pos_fetch(xpos));}int CORD_put_proc(char c, void * client_data){    register FILE * f = (FILE *)client_data;        return(putc(c, f) == EOF);}int CORD_batched_put_proc(const char * s, void * client_data){    register FILE * f = (FILE *)client_data;        return(fputs(s, f) == EOF);}    int CORD_put(CORD x, FILE * f){    if (CORD_iter5(x, 0, CORD_put_proc, CORD_batched_put_proc, f)) {        return(EOF);    } else {    	return(1);    }}typedef struct {    size_t pos;		/* Current position in the cord */    char target;	/* Character we're looking for	*/} chr_data;int CORD_chr_proc(char c, void * client_data){    register chr_data * d = (chr_data *)client_data;        if (c == d -> target) return(1);    (d -> pos) ++;    return(0);}int CORD_rchr_proc(char c, void * client_data){    register chr_data * d = (chr_data *)client_data;        if (c == d -> target) return(1);    (d -> pos) --;    return(0);}int CORD_batched_chr_proc(const char *s, void * client_data)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品理论电影在线| 国产精品免费久久| 91在线云播放| 另类综合日韩欧美亚洲| 1区2区3区精品视频| 日韩欧美123| 在线观看日韩一区| 国产美女视频一区| 日韩高清一区在线| 亚洲黄色片在线观看| 久久午夜色播影院免费高清| 538prom精品视频线放| 91在线视频在线| 国产一区二区三区av电影 | 肉肉av福利一精品导航| 日本一区二区三区久久久久久久久不| 欧美精品在欧美一区二区少妇| av电影一区二区| 国产毛片精品国产一区二区三区| 日本 国产 欧美色综合| 亚洲国产日韩av| 亚洲欧洲性图库| 国产三区在线成人av| 日韩欧美国产小视频| 欧美电影一区二区| 欧美视频在线一区| 91福利在线看| 91浏览器打开| 91丨九色丨尤物| 北岛玲一区二区三区四区| 国产成人免费av在线| 国产一区二区三区观看| 九色porny丨国产精品| 麻豆国产一区二区| 精品一区二区三区不卡| 麻豆精品国产传媒mv男同 | 亚洲午夜精品网| 一区二区激情小说| 亚洲一区二区三区四区在线观看 | 国产成人综合在线观看| 国产乱码一区二区三区| 精品一区二区三区免费播放| 老司机精品视频一区二区三区| 免费高清视频精品| 蜜臀av国产精品久久久久| 日韩av网站免费在线| 蜜桃av一区二区三区| 另类欧美日韩国产在线| 国产在线一区二区| 国产一区二区三区免费在线观看| 国产精品538一区二区在线| 国产成人av资源| 精品奇米国产一区二区三区| 日韩精品在线一区| 久久精品免视看| 中文字幕一区二区三区蜜月| 综合亚洲深深色噜噜狠狠网站| 亚洲女同一区二区| 亚洲线精品一区二区三区八戒| 日韩精品一区第一页| 久久精品国产999大香线蕉| 国产精品一区二区x88av| 不卡高清视频专区| 在线观看不卡一区| 欧美一区二区三区系列电影| 精品国产91洋老外米糕| 亚洲国产电影在线观看| 一区二区三区四区在线免费观看| 亚洲国产va精品久久久不卡综合| 美女一区二区视频| 成人毛片老司机大片| 欧美性一区二区| 欧美成人性战久久| 亚洲天堂av一区| 日本视频免费一区| www.99精品| 91麻豆精品国产91久久久更新时间| 久久免费电影网| 一区二区三区日韩在线观看| 久久99国产精品免费| 99久久精品免费看| 欧美一区二区三区在线看| 中文无字幕一区二区三区| 一区二区三区国产精华| 天堂蜜桃一区二区三区| 高清国产午夜精品久久久久久| 欧美午夜寂寞影院| 久久免费电影网| 亚洲成人黄色影院| 大白屁股一区二区视频| 欧美老肥妇做.爰bbww| 中文字幕+乱码+中文字幕一区| 日韩av一级电影| 91香蕉视频mp4| 久久久另类综合| 天天综合天天做天天综合| av影院午夜一区| 日韩视频免费观看高清完整版在线观看| 欧美极品另类videosde| 日韩精品午夜视频| 91免费观看视频| 久久免费电影网| 天堂av在线一区| 日本道免费精品一区二区三区| 久久综合色一综合色88| 亚洲国产aⅴ成人精品无吗| 成人激情综合网站| 欧美精品一区二区久久婷婷| 亚洲国产美女搞黄色| 成人不卡免费av| 亚洲精品一区二区三区蜜桃下载| 午夜精品123| 91麻豆swag| 中文字幕亚洲区| 懂色av一区二区在线播放| 26uuu国产在线精品一区二区| 亚洲国产精品一区二区www在线| 成人午夜电影网站| 久久先锋影音av鲁色资源网| 欧美色爱综合网| 亚洲视频狠狠干| 高清不卡一二三区| 久久久久久久久蜜桃| 精品一区二区在线免费观看| 欧美一级片在线| 视频一区二区欧美| 欧美午夜片在线看| 亚洲综合网站在线观看| 91无套直看片红桃| 亚洲免费在线看| 91香蕉视频mp4| 一区二区三区在线视频免费观看| 成人久久久精品乱码一区二区三区 | 国内精品伊人久久久久av影院| 日韩一区二区不卡| 免费人成黄页网站在线一区二区 | 中文字幕欧美三区| 丁香婷婷综合五月| 国产欧美一区二区三区鸳鸯浴| 国产九九视频一区二区三区| 久久日一线二线三线suv| 国产成人精品免费| 中文字幕人成不卡一区| 91色视频在线| 亚洲午夜精品久久久久久久久| 亚洲男人电影天堂| 色婷婷一区二区| 亚洲成人精品一区| 日韩一级二级三级精品视频| 久久精品99久久久| 久久九九久久九九| 99久久er热在这里只有精品66| 亚洲品质自拍视频| 欧美三级视频在线| 日本成人在线网站| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 91丨九色porny丨蝌蚪| 亚洲自拍都市欧美小说| 91精品国产综合久久久久久久| 美女视频黄免费的久久| 久久综合久久鬼色| 99久久亚洲一区二区三区青草| 亚洲一区中文日韩| 欧美一区二区观看视频| 国产精品888| 洋洋成人永久网站入口| 日韩欧美国产一二三区| 成人动漫在线一区| 五月天一区二区三区| 欧美精品一区二区三区四区| 成人av第一页| 日韩精品电影在线观看| 国产三级久久久| 欧美性受xxxx黑人xyx性爽| 日本视频中文字幕一区二区三区| 久久久久久99精品| 欧美性做爰猛烈叫床潮| 激情综合网天天干| 一区二区三区欧美日韩| 26uuu国产一区二区三区| 色综合天天做天天爱| 日本在线不卡视频| 国产精品国产三级国产aⅴ入口| 欧美日韩亚洲综合| 成人永久看片免费视频天堂| 午夜国产精品影院在线观看| 久久九九99视频| 欧美日韩激情一区| 国产成人在线免费| 天天av天天翘天天综合网| 亚洲国产高清在线| 日韩一二三区视频| 色综合咪咪久久| 国产精品一二三| 日产国产欧美视频一区精品| 亚洲色图清纯唯美| 久久精品夜色噜噜亚洲a∨| 欧美日韩精品专区| 91视频com| 国产a级毛片一区|