Annotation of embedaddon/bird2/lib/buffer.h, revision 1.1

1.1     ! misho       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>