File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / bird2 / lib / buffer.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Oct 21 16:03:56 2019 UTC (4 years, 9 months ago) by misho
Branches: bird2, MAIN
CVS tags: v2_0_7p0, HEAD
bird2 ver 2.0.7

    1: /*
    2:  *	BIRD Library -- Generic Buffer Structure
    3:  *
    4:  *	(c) 2013 Ondrej Zajicek <santiago@crfreenet.org>
    5:  *	(c) 2013 CZ.NIC z.s.p.o.
    6:  *
    7:  *	Can be freely distributed and used under the terms of the GNU GPL.
    8:  */
    9: 
   10: #ifndef _BIRD_BUFFER_H_
   11: #define _BIRD_BUFFER_H_
   12: 
   13: #include "lib/resource.h"
   14: #include "sysdep/config.h"
   15: 
   16: #define BUFFER_(type)		struct { type *data; uint used, size; }
   17: #define BUFFER_TYPE(v)		typeof(* (v).data)
   18: #define BUFFER_SIZE(v)		((v).size * sizeof(* (v).data))
   19: 
   20: #ifndef PARSER
   21: #define BUFFER(type) BUFFER_(type)
   22: #endif
   23: 
   24: #define BUFFER_INIT(v,pool,isize)					\
   25:   ({									\
   26:     (v).used = 0;							\
   27:     (v).size = (isize);							\
   28:     (v).data = mb_alloc(pool, BUFFER_SIZE(v));				\
   29:   })
   30: 
   31: #define BUFFER_SET(v,nsize)						\
   32:   ({									\
   33:     (v).used = (nsize);							\
   34:     if ((v).used > (v).size)						\
   35:       buffer_realloc((void **) &((v).data), &((v).size), (v).used, sizeof(* (v).data)); \
   36:   })
   37: 
   38: #define BUFFER_INC(v,step)						\
   39:   ({									\
   40:     uint _o = (v).used;							\
   41:     BUFFER_SET(v, (v).used + (step));					\
   42:     (v).data + _o;							\
   43:   })
   44: 
   45: #define BUFFER_DEC(v,step)	({ (v).used -= (step); })
   46: 
   47: #define BUFFER_PUSH(v)		(*BUFFER_INC(v,1))
   48: 
   49: #define BUFFER_POP(v)		BUFFER_DEC(v,1)
   50: 
   51: #define BUFFER_FLUSH(v)		({ (v).used = 0; })
   52: 
   53: #define BUFFER_WALK(v,n)						\
   54:   for (BUFFER_TYPE(v) *_n = (v).data, n; _n < ((v).data + (v).used) && (n = *_n, 1); _n++)
   55: 
   56: #define BUFFER_SHALLOW_COPY(dst, src)					\
   57:   ({									\
   58:     (dst).used = (src).used;						\
   59:     (dst).size = (src).size;						\
   60:     (dst).data = (src).data;						\
   61:   })
   62: 
   63: #endif /* _BIRD_BUFFER_H_ */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>