1 /* 2 ** OSSP al -- Assembly Line 3 ** Copyright (c) 2002-2005 The OSSP Project <http://www.ossp.org/> 4 ** Copyright (c) 2002-2005 Cable & Wireless <http://www.cw.com/> 5 ** Copyright (c) 2002-2005 Ralf S. Engelschall <rse@engelschall.com> 6 ** Copyright (c) 2002-2005 Michael van Elst <mlelstv@serpens.de> 7 ** 8 ** This file is part of OSSP al, an abstract datatype of a data buffer 9 ** that can assemble, move and truncate data but avoids actual copying 10 ** and which can be found at http://www.ossp.org/pkg/lib/al/. 11 ** 12 ** Permission to use, copy, modify, and distribute this software for 13 ** any purpose with or without fee is hereby granted, provided that 14 ** the above copyright notice and this permission notice appear in all 15 ** copies. 16 ** 17 ** THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 18 ** WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19 ** MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20 ** IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR 21 ** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22 ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 24 ** USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 ** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 26 ** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 27 ** OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28 ** SUCH DAMAGE. 29 ** 30 ** al.h: assembly line public API definition 31 */ 32 33 #ifndef __AL_H__ 34 #define __AL_H__ 35 36 typedef enum { 37 AL_OK, 38 AL_ERR_ARG, 39 AL_ERR_MEM, 40 AL_ERR_EOF, 41 AL_ERR_INT 42 } al_rc_t; 43 44 struct al_st; 45 typedef struct al_st al_t; 46 47 struct al_chunk_st; 48 typedef struct al_chunk_st al_chunk_t; 49 50 typedef void *al_label_t; 51 52 typedef enum { 53 AL_FORWARD, 54 AL_BACKWARD, 55 AL_FORWARD_SPAN, 56 AL_BACKWARD_SPAN 57 } al_td_t; 58 59 struct al_tx_st; 60 typedef struct al_tx_st al_tx_t; 61 62 al_rc_t al_create (al_t **alp); 63 al_rc_t al_destroy (al_t *al); 64 al_rc_t al_append_bytes (al_t *al, const char *src, size_t n, al_label_t label); 65 al_rc_t al_prepend_bytes(al_t *al, const char *src, size_t n, al_label_t label); 66 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); 67 al_rc_t al_txalloc (al_t *al, al_tx_t **txp); 68 al_rc_t al_txfree (al_t *al, al_tx_t *tx); 69 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); 70 al_rc_t al_traverse_next(al_t *al, al_tx_t *tx, al_chunk_t **alcp); 71 al_rc_t al_traverse_end (al_t *al, al_tx_t *tx, int final); 72 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); 73 al_rc_t al_copy (al_t *al, size_t off, size_t n, al_label_t label, al_t *tal); 74 al_rc_t al_splice (al_t *al, size_t off, size_t n, al_t *nal, al_t *tal); 75 al_rc_t al_setlabel (al_t *al, size_t off, size_t n, al_label_t oldlabel, al_label_t newlabel); 76 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); 77 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); 78 al_rc_t al_spanlabel (al_t *al, size_t off, size_t n, al_label_t label, size_t *offp, size_t *spanp); 79 80 size_t al_bytes (const al_t *al); 81 size_t al_chunk_len (al_chunk_t *alc); 82 al_label_t al_chunk_label(al_chunk_t *alc); 83 int al_same_label (al_chunk_t *alc, al_label_t label); 84 size_t al_chunk_span (al_chunk_t *alc, size_t off, size_t n); 85 char *al_chunk_ptr (al_chunk_t *alc, size_t off); 86 87 const char *al_error (al_rc_t rc); 88 89 #endif /* __AL_H__ */ 90 91