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);
@