?? obstack.h
字號:
#define obstack_begin(h, size) \ _obstack_begin ((h), (size), 0, obstack_chunk_alloc, obstack_chunk_free)#define obstack_1grow_fast(h,achar) (*((h)->next_free)++ = achar)#define obstack_blank_fast(h,n) ((h)->next_free += (n))#if defined (__GNUC__) && defined (__STDC__)/* For GNU C, if not -traditional, we can define these macros to compute all args only once without using a global variable. Also, we can avoid using the `temp' slot, to make faster code. */#define obstack_object_size(OBSTACK) \ ({ struct obstack *__o = (OBSTACK); \ (unsigned) (__o->next_free - __o->object_base); })#define obstack_room(OBSTACK) \ ({ struct obstack *__o = (OBSTACK); \ (unsigned) (__o->chunk_limit - __o->next_free); })#define obstack_grow(OBSTACK,where,length) \({ struct obstack *__o = (OBSTACK); \ int __len = (length); \ ((__o->next_free + __len > __o->chunk_limit) \ ? _obstack_newchunk (__o, __len) : 0); \ bcopy (where, __o->next_free, __len); \ __o->next_free += __len; \ (void) 0; })#define obstack_grow0(OBSTACK,where,length) \({ struct obstack *__o = (OBSTACK); \ int __len = (length); \ ((__o->next_free + __len + 1 > __o->chunk_limit) \ ? _obstack_newchunk (__o, __len + 1) : 0), \ bcopy (where, __o->next_free, __len), \ __o->next_free += __len, \ *(__o->next_free)++ = 0; \ (void) 0; })#define obstack_1grow(OBSTACK,datum) \({ struct obstack *__o = (OBSTACK); \ ((__o->next_free + 1 > __o->chunk_limit) \ ? _obstack_newchunk (__o, 1) : 0), \ *(__o->next_free)++ = (datum); \ (void) 0; })/* These assume that the obstack alignment is good enough for pointers or ints, and that the data added so far to the current object shares that much alignment. */ #define obstack_ptr_grow(OBSTACK,datum) \({ struct obstack *__o = (OBSTACK); \ ((__o->next_free + sizeof (void *) > __o->chunk_limit) \ ? _obstack_newchunk (__o, sizeof (void *)) : 0), \ *((void **)__o->next_free)++ = ((void *)datum); \ (void) 0; })#define obstack_int_grow(OBSTACK,datum) \({ struct obstack *__o = (OBSTACK); \ ((__o->next_free + sizeof (int) > __o->chunk_limit) \ ? _obstack_newchunk (__o, sizeof (int)) : 0), \ *((int *)__o->next_free)++ = ((int)datum); \ (void) 0; })#define obstack_ptr_grow_fast(h,aptr) (*((void **)(h)->next_free)++ = (void *)aptr)#define obstack_int_grow_fast(h,aint) (*((int *)(h)->next_free)++ = (int)aint)#define obstack_blank(OBSTACK,length) \({ struct obstack *__o = (OBSTACK); \ int __len = (length); \ ((__o->next_free + __len > __o->chunk_limit) \ ? _obstack_newchunk (__o, __len) : 0); \ __o->next_free += __len; \ (void) 0; })#define obstack_alloc(OBSTACK,length) \({ struct obstack *__h = (OBSTACK); \ obstack_blank (__h, (length)); \ obstack_finish (__h); })#define obstack_copy(OBSTACK,where,length) \({ struct obstack *__h = (OBSTACK); \ obstack_grow (__h, (where), (length)); \ obstack_finish (__h); })#define obstack_copy0(OBSTACK,where,length) \({ struct obstack *__h = (OBSTACK); \ obstack_grow0 (__h, (where), (length)); \ obstack_finish (__h); })#define obstack_finish(OBSTACK) \({ struct obstack *__o = (OBSTACK); \ void *value = (void *) __o->object_base; \ __o->next_free \ = __INT_TO_PTR ((__PTR_TO_INT (__o->next_free)+__o->alignment_mask)\ & ~ (__o->alignment_mask)); \ ((__o->next_free - (char *)__o->chunk \ > __o->chunk_limit - (char *)__o->chunk) \ ? (__o->next_free = __o->chunk_limit) : 0); \ __o->object_base = __o->next_free; \ value; })#define obstack_free(OBSTACK, OBJ) \({ struct obstack *__o = (OBSTACK); \ void *__obj = (OBJ); \ if (__obj >= (void *)__o->chunk && __obj < (void *)__o->chunk_limit) \ __o->next_free = __o->object_base = __obj; \ else (obstack_free) (__o, __obj); })#else /* not __GNUC__ or not __STDC__ *//* The non-GNU macros copy the obstack-pointer into this global variable to avoid multiple evaluation. */extern struct obstack *_obstack;#define obstack_object_size(h) \ (unsigned) (_obstack = (h), (h)->next_free - (h)->object_base)#define obstack_room(h) \ (unsigned) (_obstack = (h), (h)->chunk_limit - (h)->next_free)#define obstack_grow(h,where,length) \( (h)->temp = (length), \ (((h)->next_free + (h)->temp > (h)->chunk_limit) \ ? _obstack_newchunk ((h), (h)->temp) : 0), \ bcopy (where, (h)->next_free, (h)->temp), \ (h)->next_free += (h)->temp)#define obstack_grow0(h,where,length) \( (h)->temp = (length), \ (((h)->next_free + (h)->temp + 1 > (h)->chunk_limit) \ ? _obstack_newchunk ((h), (h)->temp + 1) : 0), \ bcopy (where, (h)->next_free, (h)->temp), \ (h)->next_free += (h)->temp, \ *((h)->next_free)++ = 0)#define obstack_1grow(h,datum) \( (((h)->next_free + 1 > (h)->chunk_limit) \ ? _obstack_newchunk ((h), 1) : 0), \ *((h)->next_free)++ = (datum))#define obstack_ptr_grow(h,datum) \( (((h)->next_free + sizeof (char *) > (h)->chunk_limit) \ ? _obstack_newchunk ((h), sizeof (char *)) : 0), \ *((char **)(h)->next_free)++ = ((char *)datum))#define obstack_int_grow(h,datum) \( (((h)->next_free + sizeof (int) > (h)->chunk_limit) \ ? _obstack_newchunk ((h), sizeof (int)) : 0), \ *((int *)(h)->next_free)++ = ((int)datum))#define obstack_ptr_grow_fast(h,aptr) (*((char **)(h)->next_free)++ = (char *)aptr)#define obstack_int_grow_fast(h,aint) (*((int *)(h)->next_free)++ = (int)aint)#define obstack_blank(h,length) \( (h)->temp = (length), \ (((h)->next_free + (h)->temp > (h)->chunk_limit) \ ? _obstack_newchunk ((h), (h)->temp) : 0), \ (h)->next_free += (h)->temp)#define obstack_alloc(h,length) \ (obstack_blank ((h), (length)), obstack_finish ((h)))#define obstack_copy(h,where,length) \ (obstack_grow ((h), (where), (length)), obstack_finish ((h)))#define obstack_copy0(h,where,length) \ (obstack_grow0 ((h), (where), (length)), obstack_finish ((h)))#define obstack_finish(h) \( (h)->temp = __PTR_TO_INT ((h)->object_base), \ (h)->next_free \ = __INT_TO_PTR ((__PTR_TO_INT ((h)->next_free)+(h)->alignment_mask) \ & ~ ((h)->alignment_mask)), \ (((h)->next_free - (char *)(h)->chunk \ > (h)->chunk_limit - (char *)(h)->chunk) \ ? ((h)->next_free = (h)->chunk_limit) : 0), \ (h)->object_base = (h)->next_free, \ __INT_TO_PTR ((h)->temp))#ifdef __STDC__#define obstack_free(h,obj) \( (h)->temp = (char *)(obj) - (char *) (h)->chunk, \ (((h)->temp >= 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\ ? (int) ((h)->next_free = (h)->object_base \ = (h)->temp + (char *) (h)->chunk) \ : ((obstack_free) ((h), (h)->temp + (char *) (h)->chunk), 0)))#else#define obstack_free(h,obj) \( (h)->temp = (char *)(obj) - (char *) (h)->chunk, \ (((h)->temp >= 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\ ? (int) ((h)->next_free = (h)->object_base \ = (h)->temp + (char *) (h)->chunk) \ : (int) _obstack_free ((h), (h)->temp + (char *) (h)->chunk)))#endif#endif /* not __GNUC__ or not __STDC__ */#endif /* not __OBSTACKS__ */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -