SilcBuffer

NAME

    typedef struct { ... } *SilcBuffer, SilcBufferStruct;

DESCRIPTION

SILC Buffer object. Following short description of the fields of the buffer.

     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.  Reallocating the buffer may change the
        pointer.

        --------------------------------
        | 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 SilcBufferObject {
  unsigned char *head;          /* Head of the allocated buffer area */
  unsigned char *data;          /* Start of the data area */
  unsigned char *tail;          /* Start of the tail area */
  unsigned char *end;           /* End of the buffer */
} *SilcBuffer, SilcBufferStruct;