head 1.18; access; symbols; locks; strict; comment @ * @; 1.18 date 2002.12.17.13.43.19; author mlelstv; state dead; branches; next 1.17; 1.17 date 2002.11.28.17.21.55; author mlelstv; state Exp; branches; next 1.16; 1.16 date 2002.11.28.16.11.49; author mlelstv; state Exp; branches; next 1.15; 1.15 date 2002.11.28.15.12.40; author mlelstv; state Exp; branches; next 1.14; 1.14 date 2002.10.23.16.49.29; author mlelstv; state Exp; branches; next 1.13; 1.13 date 2002.10.22.15.33.16; author mlelstv; state Exp; branches; next 1.12; 1.12 date 2002.10.18.12.24.53; author mlelstv; state Exp; branches; next 1.11; 1.11 date 2002.10.18.11.01.59; author rse; state Exp; branches; next 1.10; 1.10 date 2002.10.18.09.09.18; author mlelstv; state Exp; branches; next 1.9; 1.9 date 2002.10.17.15.02.49; author rse; state Exp; branches; next 1.8; 1.8 date 2002.10.17.14.17.33; author thl; state Exp; branches; next 1.7; 1.7 date 2002.10.16.12.37.08; author rse; state Exp; branches; next 1.6; 1.6 date 2002.10.16.11.13.54; author mlelstv; state Exp; branches; next 1.5; 1.5 date 2002.10.16.07.59.00; author mlelstv; state Exp; branches; next 1.4; 1.4 date 2002.10.14.15.41.37; author mlelstv; state Exp; branches; next 1.3; 1.3 date 2002.10.14.13.34.25; author mlelstv; state Exp; branches; next 1.2; 1.2 date 2002.10.14.12.32.16; author mlelstv; state Exp; branches; next 1.1; 1.1 date 2002.10.14.08.04.46; author mlelstv; state Exp; branches; next ; desc @@ 1.18 log @moved into its own al project PR: Submitted by: Reviewed by: Approved by: Obtained from: @ text @/* ** OSSP al -- Assembly Line ** Copyright (c) 2002 The OSSP Project ** Copyright (c) 2002 Cable & Wireless Deutschland ** Copyright (c) 2002 Ralf S. Engelschall ** Copyright (c) 2002 Michael van Elst ** ** This file is part of OSSP al, an abstract datatype of a data buffer ** that can assemble, move and truncate data but avoids actual copying. ** ** Permission to use, copy, modify, and distribute this software for ** any purpose with or without fee is hereby granted, provided that ** the above copyright notice and this permission notice appear in all ** copies. ** ** THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED ** WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ** MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ** IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR ** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF ** USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, ** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ** OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ** SUCH DAMAGE. ** ** al.h: assembly line public API definition */ #ifndef __AL_H__ #define __AL_H__ typedef enum { AL_OK, AL_ERR_ARG, AL_ERR_MEM, AL_ERR_EOF, AL_ERR_INT } al_rc_t; struct al_st; typedef struct al_st al_t; struct al_chunk_st; typedef struct al_chunk_st al_chunk_t; typedef void *al_label_t; typedef enum { AL_FORWARD, AL_BACKWARD, AL_FORWARD_SPAN, AL_BACKWARD_SPAN } al_td_t; struct al_tx_st; typedef struct al_tx_st al_tx_t; al_rc_t al_create (al_t **alp); al_rc_t al_destroy (al_t *al); al_rc_t al_append_bytes (al_t *al, const char *src, size_t n, al_label_t label); al_rc_t al_prepend_bytes(al_t *al, const char *src, size_t n, al_label_t label); al_rc_t al_attach_buffer(al_t *al, char *p, size_t n, al_label_t label, void (*freemem)(char *, size_t, void *), void *u); al_rc_t al_txalloc (al_t *al, al_tx_t **txp); al_rc_t al_txfree (al_t *al, al_tx_t *tx); al_rc_t al_traverse (al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label, al_tx_t *tx); al_rc_t al_traverse_next(al_t *al, al_tx_t *tx, al_chunk_t **alcp); al_rc_t al_traverse_end (al_t *al, al_tx_t *tx, int final); al_rc_t al_traverse_cb (al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label, al_rc_t (*cb)(al_chunk_t *, void *), void *u); al_rc_t al_copy (al_t *al, size_t off, size_t n, al_label_t label, al_t *tal); al_rc_t al_splice (al_t *al, size_t off, size_t n, al_t *nal, al_t *tal); al_rc_t al_setlabel (al_t *al, size_t off, size_t n, al_label_t oldlabel, al_label_t newlabel); al_rc_t al_flatten (al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label, char *dst, size_t *lenp); al_rc_t al_firstlabel (al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label, al_label_t *labelp); al_rc_t al_spanlabel (al_t *al, size_t off, size_t n, al_label_t label, size_t *offp, size_t *spanp); size_t al_bytes (const al_t *al); size_t al_chunk_len (al_chunk_t *alc); al_label_t al_chunk_label(al_chunk_t *alc); int al_same_label (al_chunk_t *alc, al_label_t label); size_t al_chunk_span (al_chunk_t *alc, size_t off, size_t n); char *al_chunk_ptr (al_chunk_t *alc, size_t off); const char *al_error (al_rc_t rc); #endif /* __AL_H__ */ @ 1.17 log @make al_setlabel conditional (use oldlabel == NULL for unconditional behavíour) PR: Submitted by: Reviewed by: Approved by: Obtained from: @ text @@ 1.16 log @new al_spanlabel method PR: Submitted by: Reviewed by: Approved by: Obtained from: @ text @d74 1 a74 1 al_rc_t al_setlabel (al_t *al, size_t off, size_t n, al_label_t label); @ 1.15 log @new al_setlabel method to modify the data label within an assembly line. PR: Submitted by: Reviewed by: Approved by: Obtained from: @ text @d77 1 @ 1.14 log @new span traversal mode add direction to al_flatten to support span traversal utility method al_firstlabel PR: Submitted by: Reviewed by: Approved by: Obtained from: @ text @d71 1 a71 1 al_rc_t al_traverse_cb (al_t *al, size_t off, size_t n, al_td_t dir, al_label_t, al_rc_t (*cb)(al_chunk_t *, void *), void *u); d74 1 @ 1.13 log @significant API change. now support data labels. PR: Submitted by: Reviewed by: Approved by: Obtained from: @ text @d53 3 a55 1 AL_BACKWARD d74 2 a75 1 al_rc_t al_flatten (al_t *al, size_t off, size_t n, al_label_t label, char *dst, size_t *lenp); @ 1.12 log @change in al_attach_buffer API back out rse's change to al_traverse parameters. parameter order is: object ptr(if any), input parameters, output parameters PR: Submitted by: Reviewed by: Approved by: Obtained from: @ text @d49 2 d61 3 a63 3 al_rc_t al_append_bytes (al_t *al, const char *src, size_t n); al_rc_t al_prepend_bytes(al_t *al, const char *src, size_t n); al_rc_t al_attach_buffer(al_t *al, char *p, size_t n, void (*freemem)(char *, size_t, void *), void *u); d66 1 a66 1 al_rc_t al_traverse (al_t *al, size_t off, size_t n, al_td_t dir, al_tx_t *tx); d69 2 a70 2 al_rc_t al_traverse_cb (al_t *al, size_t off, size_t n, al_td_t dir, al_rc_t (*cb)(al_chunk_t *, void *), void *u); al_rc_t al_copy (al_t *al, size_t off, size_t n, al_t *tal); d72 1 a72 1 al_rc_t al_flatten (al_t *al, size_t off, size_t n, char *dst, size_t *lenp); d74 6 a79 4 size_t al_bytes (const al_t *al); size_t al_chunk_len (al_chunk_t *alc); size_t al_chunk_span(al_chunk_t *alc, size_t off, size_t n); char *al_chunk_ptr (al_chunk_t *alc, size_t off); d81 1 a81 1 const char *al_error(al_rc_t rc); @ 1.11 log @Be pedantic about consistent argument orders and move al_tx_t argument to second position where it is for all other al_tx_t based functions: -al_traverse(al_t *al, size_t off, size_t n, al_td_t dir, al_tx_t *tx) +al_traverse(al_t *al, al_tx_t *tx, size_t off, size_t n, al_td_t dir) @ text @d61 1 a61 1 al_rc_t al_attach_buffer(al_t *al, char *p, size_t n); d64 1 a64 1 al_rc_t al_traverse (al_t *al, al_tx_t *tx, size_t off, size_t n, al_td_t dir); @ 1.10 log @added al_traverse_end to API, to allow future cleanup/locking PR: Submitted by: Reviewed by: Approved by: Obtained from: @ text @d64 1 a64 1 al_rc_t al_traverse (al_t *al, size_t off, size_t n, al_td_t dir, al_tx_t *tx); @ 1.9 log @Ok, as arranged with Michael: use 'assembly line' as the official long name @ text @d64 1 d66 1 a66 1 al_rc_t al_traverse (al_t *al, size_t off, size_t n, al_td_t dir, al_tx_t *tx); @ 1.8 log @cosmetics @ text @d2 1 a2 1 ** OSSP al -- Assembly Lists d29 1 a29 1 ** al.h: assembly lists public API definition @ 1.7 log @add the usual amount of license fun @ text @d57 3 a59 3 al_rc_t al_create(al_t **alp); al_rc_t al_destroy(al_t *al); al_rc_t al_append_bytes(al_t *al, const char *src, size_t n); d62 2 a63 4 al_rc_t al_splice(al_t *al, size_t off, size_t n, al_t *nal, al_t *tal); al_rc_t al_txalloc(al_t *al, al_tx_t **txp); al_rc_t al_txfree(al_t *al, al_tx_t *tx); al_rc_t al_traverse(al_t *al, size_t off, size_t n, al_td_t dir, al_tx_t *tx); d65 5 a69 4 al_rc_t al_traverse_cb(al_t *al, size_t off, size_t n, al_td_t dir, al_rc_t (*cb)(al_chunk_t *, void *), void *u); al_rc_t al_flatten(al_t *al, size_t off, size_t n, char *dst, size_t *lenp); al_rc_t al_copy(al_t *al, size_t off, size_t n, al_t *tal); d71 2 a72 2 size_t al_bytes(const al_t *al); size_t al_chunk_len(al_chunk_t *alc); d74 1 a74 1 char *al_chunk_ptr(al_chunk_t *alc, size_t off); @ 1.6 log @code cleanup PR: Submitted by: Reviewed by: Approved by: Obtained from: @ text @d1 34 d78 3 @ 1.5 log @move private al_buffer_t declaration to .c file PR: Submitted by: Reviewed by: Approved by: Obtained from: @ text @d29 4 a32 4 al_rc_t al_txalloc(al_t *al, al_tx_t **txpp); al_rc_t al_txfree(al_t *al, al_tx_t *txp); al_rc_t al_traverse(al_t *al, size_t off, size_t n, al_td_t dir, al_tx_t *txp); al_rc_t al_traverse_next(al_t *al, al_tx_t *txp, al_chunk_t **alcp); @ 1.4 log @al_copy function, like al_flatten but into a target assembly list PR: Submitted by: Reviewed by: Approved by: Obtained from: @ text @a14 3 struct al_buffer_st; typedef struct al_buffer_st al_buffer_t; @ 1.3 log @code cleanup get rid of AL_ALL_BYTES, not very useful PR: Submitted by: Reviewed by: Approved by: Obtained from: @ text @d39 1 @ 1.2 log @splice operation traversal needs alloc/free function for context lost of comments PR: Submitted by: Reviewed by: Approved by: Obtained from: @ text @a22 2 #define AL_BYTES_ALL (-1) d45 1 @ 1.1 log @first iteration through buffer data type PR: Submitted by: Reviewed by: Approved by: Obtained from: @ text @d33 3 a35 2 al_rc_t al_splice(al_t *al, size_t off, size_t n, al_t *tal); al_rc_t al_truncate(al_t *al, size_t off, size_t n); d40 1 a40 1 al_rc_t al_flatten(al_t *al, size_t off, size_t n, char *dst); @