--------------------- PatchSet 10309 Date: 2007/12/24 14:11:52 Author: adri Branch: s27_adri Tag: (none) Log: Implement some basic buffer region referencing. This stuff is (currently) unreferenced. Members: libbuf/Makefile.am:1.1.2.3->1.1.2.4 libbuf/bufregion.c:1.1->1.1.2.1 libbuf/bufregion.h:1.1->1.1.2.1 Index: squid/libbuf/Makefile.am =================================================================== RCS file: /cvsroot/squid-sf//squid/libbuf/Attic/Makefile.am,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -u -r1.1.2.3 -r1.1.2.4 --- squid/libbuf/Makefile.am 13 Dec 2007 12:18:22 -0000 1.1.2.3 +++ squid/libbuf/Makefile.am 24 Dec 2007 14:11:53 -0000 1.1.2.4 @@ -1,11 +1,12 @@ ## Process this file with automake to produce Makefile.in # -# $Id: Makefile.am,v 1.1.2.3 2007/12/13 12:18:22 adri Exp $ +# $Id: Makefile.am,v 1.1.2.4 2007/12/24 14:11:53 adri Exp $ # libbuf_a_SOURCES = \ buf.c \ iobuf.c \ + bufregion.c \ str.c \ String.c \ StringMap.c @@ -13,6 +14,7 @@ libbuf_a_LIBADD = \ buf.o \ iobuf.o \ + bufregion.o \ str.o \ String.o \ StringMap.o --- /dev/null Tue Dec 25 01:22:57 2007 +++ squid/libbuf/bufregion.c Tue Dec 25 01:22:57 2007 @@ -0,0 +1,48 @@ +#include +#include +#include +#include +#include + +#include "../libcore/varargs.h" +#include "../libcore/debug.h" +#include "../libcore/tools.h" +#include "buf.h" +#include "bufregion.h" + + +void +bufregion_init(bufregion_t *br) +{ + br->b = NULL; + br->offset = br->length = -1; +} + +void +bufregion_free(bufregion_t *br) +{ + br->b = buf_deref(br->b); + br->offset = br->length = -1; +} + +void +bufregion_init_buf(bufregion_t *br, buf_t *b, int offset, int length) +{ + assert(offset < buf_len(b)); + assert(offset + length < buf_len(b)); + br->b = buf_ref(b); + buf_make_immutable(br->b, offset + length); + br->offset = offset; + br->length = length; +} + +void +bufregion_init_region(bufregion_t *br, bufregion_t *src, int offset, int length) +{ + assert(offset < src->offset + src->length); + assert(offset + length < src->offset + src->length); + br->b = buf_ref(src->b); + br->offset = src->offset + offset; + br->length = src->offset + length; + buf_make_immutable(br->b, br->offset + br->length); +} --- /dev/null Tue Dec 25 01:22:57 2007 +++ squid/libbuf/bufregion.h Tue Dec 25 01:22:57 2007 @@ -0,0 +1,27 @@ +#ifndef __LIBCORE_BUFREGION_H__ +#define __LIBCORE_BUFREGION_H__ + +struct _bufregion { + buf_t *b; + int offset, length; +}; + +typedef struct _bufregion bufregion_t; + +extern void bufregion_init(bufregion_t *br); +extern void bufregion_free(bufregion_t *br); +extern void bufregion_init_buf(bufregion_t *br, buf_t *b, int offset, int length); +extern void bufregion_init_region(bufregion_t *br, bufregion_t *src, int offset, int length); + +#define bufRegionLen(br) ( (br).length ) + +static inline int +bufRegionGet(bufregion_t *br, int offset) +{ + if (offset > br->offset + br->length) + return -1; + return buf_get_chr(br->b, br->offset + offset); +} + + +#endif