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

📄 dyna.h

📁 飞鸽传书for linux X图形界面下源码
💻 H
字号:
/* * dyna.h -- 瓢弄に络きくなるバッファ * Copyright (C) 1991-1993 by candy * Thu Oct 31 10:13:53 JST 1996 *   DYNA_IZ() 稍妥に * Sat May  3 00:27:48 JST 1997 *   BOGUS_REALLOC *//* * $Id: dyna.h,v 3.6 1996/11/28 09:01:21 candy Exp $ */#ifndef __DYNA_H /* [ */#define __DYNA_H#ifdef BOGUS_REALLOC#undef realloc#define realloc(p,s) ((p)?((realloc)(p,s)):malloc(s))#endif/* * NAME * 	STRUCT_DYNA - 菇陇挛の离咐(の办婶——) * * SYNOPSIS * 	struct DYNA STRUCT_DYNA(TYPE); * * DESCRIPTION * 	TYPE 房を妥燎とする瓢弄に络きくなる芹误を胺う菇陇挛 * 		struct DYNA * 	を离咐します。 * * EXAPMLE * 	struct CHAR_BUF STRUCT_DYNA(char);  矢机バッファ * 	struct LIST_BUF STRUCT_DYNA(char *);  矢机误のリスト * 	のように离咐します。 * 	TYPE の今及には扩嘎があって、年盗 * 		TYPE * identifier; * 	において、identifier が TYPE へのポインタとなるようなものしか今けません。 * 	毋えば * 		STRUCT_DYNA(char **) はいいけれど * 		STRUCT_DYNA(int (*)()) はだめです。 */#define STRUCT_DYNA(TYPE) \	{ \	unsigned int more, size, used; \	TYPE *buf; \	TYPE *spare; \	}/* * NAME * 	DYNA_IZ - 菇陇挛の介袋步 * * SYNOPSIS * 	void DYNA_IZ(struct DYNA *dyna, unsigned int nmore); * * DESCRIPTION * 	菇陇挛を介袋步します。 * 	dyna には STRUCT_DYNA で离咐した菇陇挛のアドレスを涂えます。 * 	nmore には办刨に笼裁する妥燎の眶を回年します。 * * EXAMPLE * 	struct LIST_BUF STRUCT_DYNA(char *) list_buf; * 	の箕、 * 	DYNA_IZ(&list_buf, 64); * 	のように介袋步します。 */#define DYNA_IZ(dyna, nmore) ((void)( \	(dyna)->more = (nmore), \	(dyna)->used = (dyna)->size = 0, \	(dyna)->buf = (void *)0 \	))/* * NAME * 	DYNA_BRK - 芹误の橙络 * * SYNOPSIS * 	TYPE *DYNA_BRK(struct DYNA *dyna, unsigned int nmore); * * DESCRIPTION * 	菇陇挛の芹误を nmore 改だけ橙络します。 * 	DYNA_NEXT() が极瓢弄に悸乖するので舍奶は簇犯ありません。 * 	喇根なら NULL 笆嘲を手し、己窃なら NULL を手します。 * * EXAMPLE * 	struct LIST_BUF STRUCT_DYNA(char *) list_buf; * 	DYNA_IZ(&list_buf, 64); * 	の箕、 * 	if (DYNA_BRK(&list_buf, 16) == NULL) * 		goto no_memory; * 	などとします。 */#define DYNA_BRK(dyna, nmore) ( \	(dyna)->spare = (dyna)->buf, \	(dyna)->size += (nmore), \	(dyna)->buf = realloc((dyna)->buf, (dyna)->size * sizeof((dyna)->buf[0])), \	(((dyna)->buf != (void *)0) ? (dyna)->buf \	: ((dyna)->buf = (dyna)->spare, \		(dyna)->size -= (nmore), \		(void *)0)) \	)/* * NAME * 	DYNA_NEXT - バッファの橙络 * * SYNOPSIS * 	TYPE *DYNA_NEXT(struct DYNA *dyna); * * DESCRIPTION * 	芹误の糠しい妥燎のアドレスを手します。 * 	蝗脱挝拌が 1 笼えます。 * 	颅りない眷圭は DYNA_BRK() を钙び叫します。 * 	己窃なら NULL を手します。 * * EXAMPLE * 	struct LIST_BUF STRUCT_DYNA(char *)list_buf; * 	char **next; * 	DYNA_IZ(&list_buf, 64); * 	の箕、 * 	if ((next = DYNA_NEXT(&list_buf)) == NULL) * 		goto no_memory; * *next = malloc(256); * 	などとします。 */#define DYNA_NEXT(dyna) ( \	((dyna)->used >= (dyna)->size && DYNA_BRK(dyna, \		((dyna)->more ? (dyna)->more : 256)) == (void *)0) \	? (void *)0 \	: (dyna)->buf + (dyna)->used++ \	)/* * NAME * 	DYNA_ALLOC - バッファの橙络 * * SYNOPSIS * 	TYPE *DYNA_ALLOC(struct DYNA *dyna, unsigned int n); * * DESCRIPTION * 	芹误の面の糠しい n 改の息鲁した妥燎のアドレスを手します。 * 	蝗脱挝拌が n 笼えます。 * 	颅りない眷圭は DYNA_BRK() を钙び叫します。 * 	己窃なら NULL を手します。 * * EXAMPLE * 	struct CHAR_BUF STRUCT_DYNA(char) char_buf; * 	char *next; * 	DYNA_IZ(&char_buf, 256); * 	の箕、 * 	if ((next = DYNA_ALLOC(&char_buf, strlen(s) + 1)) == NULL) * 		goto no_memory; * 	strcpy(next, s); * などとします。 */#define DYNA_ALLOC(dyna, nmore) ( \	((dyna)->used + (nmore) > (dyna)->size && DYNA_BRK(dyna, (dyna)->more + (nmore)) == (void *)0) \	? ((void *)0)\	: ((dyna)->used += (nmore), (dyna)->buf + (dyna)->used - (nmore))\	)/* * NAME * 	DYNA_RESET - バッファを鄂にする * * SYNOPSIS * 	void DYNA_RESET(struct DYNA *dyna) * * DESCRIPTION * 	バッファを鄂にします(蝗脱挝拌を 0 にします)。 * 	dyna には STRUCT_DYNA で离咐した菇陇挛のアドレスを涂えます。 */#define DYNA_RESET(dyna) ((void)((dyna)->used = 0))/* * NAME * 	DYNA_UNGROW - バッファの教井 * * SYNOPSIS * 	void DYNA_UNGROW(struct DYNA *dyna, unsigned int n); * * DESCRIPTION * 	バッファの络きさ(蝗脱挝拌)が 0 でなければ、n 妥燎尸教井します。 * */#define DYNA_UNGROW(dyna, n) ((void)((dyna)->used > (n) ? ((dyna)->used -= (n)) : ((dyna)->used = 0)))/* * NAME * 	DYNA_BUF - バッファのアドレス * * SYNOPSIS * 	TYPE *DYNA_BUF(struct DYNA *dyna); * * DESCRIPTION * 	バッファの呵介の妥燎のアドレスを手します。 * 	DYNA_BRK() や DYNA_NEXT() によって猛が恃步しますので、 * 	それらを钙び叫した稿は笆涟の猛は痰跟になります。 */#define DYNA_BUF(dyna) ((dyna)->buf)/* * NAME * 	DYNA_USED - バッファの络きさ * * SYNOPSIS * 	unsigned int DYNA_USED(struct DYNA *dyna); * * DESCRIPTION * 	バッファの络きさを手します。 * 	DYNA_IZ() 木稿は 0 で、 * 	DYNA_NEXT() する髓に + 1 します。 */#define DYNA_USED(dyna) ((dyna)->used)#endif /* ] !__DYNA_H */

⌨️ 快捷键说明

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