Structure SilcBuffer
NAME
typedef struct { ... } *SilcBuffer, SilcBufferStruct;
DESCRIPTION
SILC Buffer object. Following short description of the fields
of the buffer.
EXAMPLE
SilcUInt32 truelen;
True length of the buffer. This is set at the allocation of the
buffer and it should not be touched after that. This field should
be considered read-only.
SilcUInt32 len;
Length of the currently valid data area. Tells the length of the
data at the buffer. This is set to zero at the allocation of the
buffer and should not be updated by hand. Method functions of the
buffer automatically updates this field. However, it is not
read-only field and can be updated manually if necessary.
unsiged char *head;
Head of the allocated buffer. This is the start of the allocated
data area and remains as same throughout the lifetime of the buffer.
However, the end of the head area or the start of the currently valid
data area is variable.
--------------------------------
| head | data | tail |
--------------------------------
^ ^
Current head section in the buffer is sb->data - sb->head.
unsigned char *data;
Currently valid data area. This is the start of the currently valid
main data area. The data area is variable in all directions.
--------------------------------
| head | data | tail |
--------------------------------
^ ^
Current valid data area in the buffer is sb->tail - sb->data.
unsigned char *tail;
Tail of the buffer. This is the end of the currently valid data area
or start of the tail area. The start of the tail area is variable.
--------------------------------
| head | data | tail |
--------------------------------
^ ^
Current tail section in the buffer is sb->end - sb->tail.
unsigned char *end;
End of the allocated buffer. This is the end of the allocated data
area and remains as same throughout the lifetime of the buffer.
Usually this field is not needed except when checking the size
of the buffer.
--------------------------------
| head | data | tail |
--------------------------------
^
Length of the entire buffer is (ie. truelen) sb->end - sb->head.
Currently valid data area is considered to be the main data area in
the buffer. However, the entire buffer is of course valid data and can
be used as such. Usually head section of the buffer includes different
kind of headers or similar. Data section includes the main data of
the buffer. Tail section can be seen as a reserve space of the data
section. Tail section can be pulled towards end, and thus the data
section becomes larger.
SOURCE
typedef struct {
SilcUInt32 truelen;
SilcUInt32 len;
unsigned char *head;
unsigned char *data;
unsigned char *tail;
unsigned char *end;
} *SilcBuffer, SilcBufferStruct;
|