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; struct al_buffer_st; typedef struct al_buffer_st al_buffer_t; typedef enum { AL_FORWARD, AL_BACKWARD } al_td_t; #define AL_BYTES_ALL (-1) 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_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); 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 **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); 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); 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);