/************************************************************************
 *   IRC - Internet Relay Chat, include/sbuf.h
 *   Copyright (C) 2004 David Parton
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 1, or (at your option)
 *   any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program; if not, write to the Free Software
 *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
/* $Id: sbuf.h,v 1.2 2005/07/05 02:40:01 sheik Exp $ */

#ifndef SBUF_H
#define SBUF_H

/* Definitions */
#define SBUF_LARGE_BUFFER			512
#define SBUF_SMALL_BUFFER			256

/* Macros */
#define IsEol(c)                    ((c) == '\r' || (c) == '\n')
#define SBufLength(s)				((s)->length)
#define SBufClear(s)				sbuf_delete((s), (s)->length)

/* forward declaration */
struct _SBufUser;
struct _SBuf;


typedef struct _SBuf
{
    int       length;
    struct _SBufUser *head, *tail;
} SBuf;

/* function protoypes */

extern int			sbuf_init();
extern int			sbuf_begin_share(const char* theData, int theLength, void** thePtr);
extern int          sbuf_end_share(void** thePtr, int theNum);
extern int          sbuf_put_share(SBuf* theBuf, void *theSBuffer);
extern int			sbuf_put(SBuf* theBuf, const char* theData, int theLength);
extern int			sbuf_delete(SBuf* theBuf, int theLength);
extern char*		sbuf_map(SBuf* theBuf, int* theLength);
extern int          sbuf_flush(SBuf* theBuf);
extern int          sbuf_getmsg(SBuf* theBuf, char* theData, int theLength);
extern int          sbuf_get(SBuf* theBuf, char* theData, int theLength);

#ifdef WRITEV_IOV
extern int          sbuf_mapiov(SBuf *, struct iovec *);
#endif

#endif /* #ifndef SBUF_H */


syntax highlighted by Code2HTML, v. 0.9.1