?? dyna.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 + -