fastbuffer.h File Reference

#include <gwenhywfar/iolayer.h>
#include <gwenhywfar/buffer.h>

Go to the source code of this file.

Data Structures

struct  GWEN_FAST_BUFFER

Defines

#define GWEN_FAST_BUFFER_FLAGS_DOSMODE   0x00000001
#define GWEN_FASTBUFFER_COPYBYTES(fb1, fb2, var, len)
#define GWEN_FASTBUFFER_COPYFORCED(fb1, fb2, var, p, len)
#define GWEN_FASTBUFFER_FLUSH(fb, var)
#define GWEN_FASTBUFFER_PEEKBYTE(fb, var)
#define GWEN_FASTBUFFER_READBYTE(fb, var)
#define GWEN_FASTBUFFER_READBYTES(fb, var, p, len)
#define GWEN_FASTBUFFER_READFORCED(fb, var, p, len)
#define GWEN_FASTBUFFER_READLINE(fb, var, p, len)
#define GWEN_FASTBUFFER_READLINEFORCED(fb, var, p, len)
#define GWEN_FASTBUFFER_WRITEBYTE(fb, var, chr)
#define GWEN_FASTBUFFER_WRITEBYTES(fb, var, p, len)
#define GWEN_FASTBUFFER_WRITEFORCED(fb, var, p, len)
#define GWEN_FASTBUFFER_WRITELINE(fb, var, p)

Functions

GWENHYWFAR_API void GWEN_FastBuffer_AddFlags (GWEN_FAST_BUFFER *fb, uint32_t fl)
GWENHYWFAR_API void GWEN_FastBuffer_free (GWEN_FAST_BUFFER *fb)
GWENHYWFAR_API uint32_t GWEN_FastBuffer_GetBytesRead (const GWEN_FAST_BUFFER *fb)
GWENHYWFAR_API uint32_t GWEN_FastBuffer_GetBytesWritten (const GWEN_FAST_BUFFER *fb)
GWENHYWFAR_API uint32_t GWEN_FastBuffer_GetFlags (const GWEN_FAST_BUFFER *fb)
GWENHYWFAR_API GWEN_FAST_BUFFERGWEN_FastBuffer_new (uint32_t bsize, GWEN_IO_LAYER *io, uint32_t guiid, int msecs)
GWENHYWFAR_API int GWEN_FastBuffer_ReadLine (GWEN_FAST_BUFFER *fb, uint8_t *p, int len)
GWENHYWFAR_API int GWEN_FastBuffer_ReadLineToBuffer (GWEN_FAST_BUFFER *fb, GWEN_BUFFER *buf)
GWENHYWFAR_API void GWEN_FastBuffer_SetFlags (GWEN_FAST_BUFFER *fb, uint32_t fl)
GWENHYWFAR_API void GWEN_FastBuffer_SubFlags (GWEN_FAST_BUFFER *fb, uint32_t fl)

Define Documentation

#define GWEN_FAST_BUFFER_FLAGS_DOSMODE   0x00000001

Definition at line 22 of file fastbuffer.h.

Referenced by GWEN_DB_ReadFromIo(), and GWEN_DB_WriteToIo().

#define GWEN_FASTBUFFER_COPYBYTES ( fb1,
fb2,
var,
len   ) 

Copy a number of bytes from one buffer to another one.

Parameters:
fb1 source fast buffer
fb2 destination fast buffer
var variable to receive the result (<0: error code, number of bytes read otherwise)
len number of bytes to copy

Definition at line 446 of file fastbuffer.h.

#define GWEN_FASTBUFFER_COPYFORCED ( fb1,
fb2,
var,
p,
len   ) 
Value:
{\
  int fb_copyforced_len;\
  uint8_t *fb_copyforced_p;\
  \
  fb_copyforced_len=len;\
  fb_copyforced_p=(uint8_t*)p;\
  var=0;\
  while(fb_copyforced_len && var==0) {\
    int fb_copyforced_rv;\
    \
    GWEN_FASTBUFFER_COPYBYTES(fb1, fb2, fb_copyforced_rv, fb_copyforced_p, fb_copyforced_len);\
    if (fb_copyforced_rv<0) {\
      var=fb_copyforced_rv;\
      break;\
    }\
    else if (fb_copyforced_rv==0)\
      var=GWEN_ERROR_EOF;\
    else {\
      fb_len-=fb_copyforced_rv;\
      fb_p+=fb_copyforced_rv;\
    }\
  }\
}

Copy a number of bytes to the buffer and make sure that all bytes are copied.

Parameters:
fb1 source fast buffer
fb2 destination fast buffer
var variable to receive the result (<0: error code, 0 on success)
p pointer to the location to write the bytes from
len number of bytes to copy

Definition at line 491 of file fastbuffer.h.

#define GWEN_FASTBUFFER_FLUSH ( fb,
var   ) 
Value:
{\
    int fb_flush_rv; \
    \
    fb_flush_rv=GWEN_Io_Layer_WriteBytes(fb->io, fb->buffer, fb->bufferWritePos, \
                                         GWEN_IO_REQUEST_FLAGS_WRITEALL | GWEN_IO_REQUEST_FLAGS_FLUSH, \
                                         fb->guiid, fb->msecs); \
    if (fb_flush_rv<(int)(fb->bufferWritePos)) { \
      DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", fb_flush_rv); \
      var=fb_flush_rv; \
    } \
    else { \
      var=0; \
      fb->bufferWritePos=0; \
    } \
  }

Flushes the write buffer (i.e. write all remaining bytes from the buffer to the io layer with the flag GWEN_IO_REQUEST_FLAGS_FLUSH set).

Definition at line 166 of file fastbuffer.h.

Referenced by GWEN_DB_WriteToFastBuffer(), GWEN_DB_WriteToIo(), and GWEN_XMLNode_WriteToStream().

#define GWEN_FASTBUFFER_PEEKBYTE ( fb,
var   ) 
Value:
{\
    if (fb->bufferReadPos>=fb->bufferWritePos) { \
      int fb_peekbyte_rv; \
      \
      fb_peekbyte_rv=GWEN_Io_Layer_ReadBytes(fb->io, fb->buffer, fb->bufferSize, 0, \
                                             fb->guiid, fb->msecs); \
      if (fb_peekbyte_rv<0) { \
        DBG_DEBUG(GWEN_LOGDOMAIN, "here (%d)", fb_peekbyte_rv); \
        var=fb_peekbyte_rv; \
      } \
      else { \
        fb->bufferWritePos=fb_peekbyte_rv; \
        fb->bufferReadPos=0; \
        var=((int)((fb->buffer[fb->bufferReadPos])) & 0xff); \
      } \
    } \
    else { \
      var=((int)((fb->buffer[fb->bufferReadPos])) & 0xff); \
    } \
  }

This macro peeks at the read buffer and returns the next available byte (if any). Consecutive peeks will always return the same byte. Also, the next GWEN_FASTBUFFER_READBYTE will return the same byte as well.

Definition at line 82 of file fastbuffer.h.

Referenced by GWEN_XML__ReadData(), GWEN_XML__ReadTag(), and GWEN_XML_ReadFromFastBuffer().

#define GWEN_FASTBUFFER_READBYTE ( fb,
var   ) 
Value:
{\
    if (fb->bufferReadPos>=fb->bufferWritePos) { \
      int fb_readbyte_rv; \
      \
      fb_readbyte_rv=GWEN_Io_Layer_ReadBytes(fb->io, fb->buffer, fb->bufferSize, 0,\
                                             fb->guiid, fb->msecs); \
      if (fb_readbyte_rv<0) { \
        DBG_DEBUG(GWEN_LOGDOMAIN, "here (%d)", fb_readbyte_rv); \
        var=fb_readbyte_rv; \
      } \
      else { \
        fb->bufferWritePos=fb_readbyte_rv; \
        fb->bufferReadPos=0; \
        var=((int)((fb->buffer[fb->bufferReadPos++])) & 0xff); \
        fb->bytesRead++; \
      } \
    } \
    else { \
      var=((int)((fb->buffer[fb->bufferReadPos++])) & 0xff); \
      fb->bytesRead++; \
    } \
  }

Returns the next byte from the buffer (if any). That byte will be placed into "var". In case of an error var will contain an error code instead.

Definition at line 108 of file fastbuffer.h.

Referenced by GWEN_XML__ReadTag().

#define GWEN_FASTBUFFER_READBYTES ( fb,
var,
p,
len   ) 
Value:
{ \
  int fb_readbyte_bytes;\
  \
  var=0; \
  if (fb->bufferReadPos>=fb->bufferWritePos) { \
    int fb_readbyte_rv; \
    \
    fb_readbyte_rv=GWEN_Io_Layer_ReadBytes(fb->io, fb->buffer, fb->bufferSize, 0, fb->guiid, fb->msecs); \
    if (fb_readbyte_rv<0) { \
      DBG_DEBUG(GWEN_LOGDOMAIN, "here (%d)", fb_readbyte_rv); \
      var=fb_readbyte_rv; \
    } \
    else {\
      fb->bufferWritePos=fb_readbyte_rv; \
      fb->bufferReadPos=0; \
    }\
  }\
  if (var==0) {\
    fb_readbyte_bytes=fb->bufferWritePos-fb->bufferReadPos;\
    if (fb_readbyte_bytes>len)\
      fb_readbyte_bytes=len;\
    if (fb_readbyte_bytes) {\
      memmove(p, fb->buffer+fb->bufferReadPos, fb_readbyte_bytes);\
      fb->bufferReadPos+=fb_readbyte_bytes;\
      fb->bytesRead+=fb_readbyte_bytes; \
    }\
    var=fb_readbyte_bytes;\
  }\
}

Reads a number of bytes from the buffer and stores it at the given memory location.

Parameters:
fb fast buffer
var variable to receive the result (<0: error code, number of bytes read otherwise)
p pointer to the location to read the bytes to
len number of bytes to read

Definition at line 190 of file fastbuffer.h.

#define GWEN_FASTBUFFER_READFORCED ( fb,
var,
p,
len   ) 
Value:
{\
  int fb_readforced_len;\
  uint8_t *fb_readforced_p;\
  \
  fb_readforced_len=len;\
  fb_readforced_p=(uint8_t*)p;\
  var=0;\
  while(fb_readforced_len && var==0) {\
    int fb_readforced_rv;\
    \
    GWEN_FASTBUFFER_READBYTES(fb, fb_readforced_rv, fb_readforced_p, fb_readforced_len);\
    if (fb_readforced_rv<0) {\
      var=fb_readforced_rv;\
      break;\
    }\
    else if (fb_readforced_rv==0) {\
      var=GWEN_ERROR_EOF;\
      break;\
    }\
    else {\
      fb_readforced_len-=fb_readforced_rv;\
      fb_readforced_p+=fb_readforced_rv;\
    }\
  }\
}

Definition at line 308 of file fastbuffer.h.

#define GWEN_FASTBUFFER_READLINE ( fb,
var,
p,
len   ) 

Definition at line 222 of file fastbuffer.h.

#define GWEN_FASTBUFFER_READLINEFORCED ( fb,
var,
p,
len   ) 

Definition at line 271 of file fastbuffer.h.

#define GWEN_FASTBUFFER_WRITEBYTE ( fb,
var,
chr   ) 
Value:
{\
    if (fb->bufferWritePos>=fb->bufferSize) { \
      int fb_writeByte_rv; \
      \
      fb_writeByte_rv=GWEN_Io_Layer_WriteBytes(fb->io, fb->buffer, fb->bufferWritePos, \
                                               GWEN_IO_REQUEST_FLAGS_WRITEALL, \
                                               fb->guiid, fb->msecs); \
      if (fb_writeByte_rv<(int)(fb->bufferWritePos)) { \
        DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", fb_writeByte_rv); \
        var=fb_writeByte_rv; \
      } \
      else { \
        var=0; \
        fb->bufferWritePos=0; \
        fb->buffer[fb->bufferWritePos++]=chr; \
        fb->bytesWritten++; \
      } \
    } \
    else { \
      var=0; \
      fb->buffer[fb->bufferWritePos++]=chr; \
      fb->bytesWritten++; \
    } \
  }

Writes a byte into the buffer (flushing it if necessary) and returns the result of this operation in "var".

Definition at line 136 of file fastbuffer.h.

Referenced by GWEN_DB_WriteGroupToIoLayer(), and GWEN_XMLNode__WriteToStream().

#define GWEN_FASTBUFFER_WRITEBYTES ( fb,
var,
p,
len   ) 

Write a number of bytes to the buffer and stores it at the given memory location.

Parameters:
fb fast buffer
var variable to receive the result (<0: error code, number of bytes read otherwise)
p pointer to the location to write the bytes from
len number of bytes to write

Definition at line 343 of file fastbuffer.h.

#define GWEN_FASTBUFFER_WRITEFORCED ( fb,
var,
p,
len   ) 
Value:
{\
  int fb_writeforced_len;\
  const uint8_t *fb_writeforced_p;\
  \
  fb_writeforced_len=len;\
  if (fb_writeforced_len==-1) \
    fb_writeforced_len=strlen((const char*)p);\
  fb_writeforced_p=(const uint8_t*)p;\
  var=0;\
  while(fb_writeforced_len && var==0) {\
    int fb_writeforced_rv;\
    \
    GWEN_FASTBUFFER_WRITEBYTES(fb, fb_writeforced_rv, fb_writeforced_p, fb_writeforced_len);\
    if (fb_writeforced_rv<0) {\
      var=fb_writeforced_rv;\
      break;\
    }\
    else if (fb_writeforced_rv==0) {\
      var=GWEN_ERROR_EOF;\
      break;\
    }\
    else {\
      fb_writeforced_len-=fb_writeforced_rv;\
      fb_writeforced_p+=fb_writeforced_rv;\
    }\
  }\
}

Write a number of bytes to the buffer and make sure that all bytes are written.

Parameters:
fb fast buffer
var variable to receive the result (<0: error code, 0 on success)
p pointer to the location to write the bytes from
len number of bytes to write

Definition at line 386 of file fastbuffer.h.

Referenced by GWEN_DB_WriteGroupToIoLayer(), and GWEN_XMLNode__WriteToStream().

#define GWEN_FASTBUFFER_WRITELINE ( fb,
var,
 ) 
Value:
{\
  int fb_writeline_rv;\
  int fb_writeline_len=strlen((const char*)p);\
  \
  GWEN_FASTBUFFER_WRITEFORCED(fb, fb_writeline_rv, p, fb_writeline_len);\
  if (fb_writeline_rv<0)\
    var=fb_writeline_rv;\
  else {\
    if (fb->flags & GWEN_FAST_BUFFER_FLAGS_DOSMODE) {\
       GWEN_FASTBUFFER_WRITEFORCED(fb, fb_writeline_rv, "\r\n", 2);\
    }\
    else {\
       GWEN_FASTBUFFER_WRITEFORCED(fb, fb_writeline_rv, "\n", 1);\
    }\
    if (fb_writeline_rv<0)\
      var=fb_writeline_rv;\
    else\
      var=0;\
  }\
}

Definition at line 416 of file fastbuffer.h.

Referenced by GWEN_DB_WriteGroupToIoLayer(), GWEN_XMLNode__WriteToStream(), and GWEN_XMLNode_WriteToStream().


Function Documentation

GWENHYWFAR_API void GWEN_FastBuffer_AddFlags ( GWEN_FAST_BUFFER fb,
uint32_t  fl 
)

Definition at line 172 of file fastbuffer.c.

References GWEN_FAST_BUFFER::flags.

Referenced by GWEN_DB_ReadFromIo(), and GWEN_DB_WriteToIo().

GWENHYWFAR_API void GWEN_FastBuffer_free ( GWEN_FAST_BUFFER fb  ) 
GWENHYWFAR_API uint32_t GWEN_FastBuffer_GetBytesRead ( const GWEN_FAST_BUFFER fb  ) 

Definition at line 193 of file fastbuffer.c.

References GWEN_FAST_BUFFER::bytesRead.

GWENHYWFAR_API uint32_t GWEN_FastBuffer_GetBytesWritten ( const GWEN_FAST_BUFFER fb  ) 

Definition at line 186 of file fastbuffer.c.

References GWEN_FAST_BUFFER::bytesWritten.

GWENHYWFAR_API uint32_t GWEN_FastBuffer_GetFlags ( const GWEN_FAST_BUFFER fb  ) 

Definition at line 158 of file fastbuffer.c.

References GWEN_FAST_BUFFER::flags.

GWENHYWFAR_API GWEN_FAST_BUFFER* GWEN_FastBuffer_new ( uint32_t  bsize,
GWEN_IO_LAYER io,
uint32_t  guiid,
int  msecs 
)
GWENHYWFAR_API int GWEN_FastBuffer_ReadLine ( GWEN_FAST_BUFFER fb,
uint8_t *  p,
int  len 
)
GWENHYWFAR_API int GWEN_FastBuffer_ReadLineToBuffer ( GWEN_FAST_BUFFER fb,
GWEN_BUFFER buf 
)
GWENHYWFAR_API void GWEN_FastBuffer_SetFlags ( GWEN_FAST_BUFFER fb,
uint32_t  fl 
)

Definition at line 165 of file fastbuffer.c.

References GWEN_FAST_BUFFER::flags.

GWENHYWFAR_API void GWEN_FastBuffer_SubFlags ( GWEN_FAST_BUFFER fb,
uint32_t  fl 
)

Definition at line 179 of file fastbuffer.c.

References GWEN_FAST_BUFFER::flags.


Generated by  doxygen 1.6.2