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

📄 ec.h

📁 A garbage collector for C and C
💻 H
字号:
# ifndef EC_H# define EC_H# ifndef CORD_H#  include "cord.h"# endif/* Extensible cords are strings that may be destructively appended to.	*//* They allow fast construction of cords from characters that are	*//* being read from a stream.						*//* * A client might look like: * *	{ *	    CORD_ec x; *	    CORD result; *	    char c; *	    FILE *f; * *	    ... *	    CORD_ec_init(x); *	    while(...) { *		c = getc(f); *		... *		CORD_ec_append(x, c); *	    } *	    result = CORD_balance(CORD_ec_to_cord(x)); * * If a C string is desired as the final result, the call to CORD_balance * may be replaced by a call to CORD_to_char_star. */# ifndef CORD_BUFSZ#   define CORD_BUFSZ 128# endiftypedef struct CORD_ec_struct {    CORD ec_cord;    char * ec_bufptr;    char ec_buf[CORD_BUFSZ+1];} CORD_ec[1];/* This structure represents the concatenation of ec_cord with		*//* ec_buf[0 ... (ec_bufptr-ec_buf-1)]					*//* Flush the buffer part of the extended chord into ec_cord.	*//* Note that this is almost the only real function, and it is	*//* implemented in 6 lines in cordxtra.c				*/void CORD_ec_flush_buf(CORD_ec x);      /* Convert an extensible cord to a cord. */# define CORD_ec_to_cord(x) (CORD_ec_flush_buf(x), (x)[0].ec_cord)/* Initialize an extensible cord. */# define CORD_ec_init(x) ((x)[0].ec_cord = 0, (x)[0].ec_bufptr = (x)[0].ec_buf)/* Append a character to an extensible cord.	*/# define CORD_ec_append(x, c) \    {  \	if ((x)[0].ec_bufptr == (x)[0].ec_buf + CORD_BUFSZ) { \	  	CORD_ec_flush_buf(x); \	} \	*((x)[0].ec_bufptr)++ = (c); \    }/* Append a cord to an extensible cord.  Structure remains shared with 	*//* original.								*/void CORD_ec_append_cord(CORD_ec x, CORD s);# endif /* EC_H */

⌨️ 快捷键说明

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