+
+
+Structure SilcBuffer
+
+
+NAME
+
+
+ typedef struct { ... } *SilcBuffer, SilcBufferStruct;
+
+
+DESCRIPTION
+
+
+ SILC Buffer object. Following short description of the fields
+ of the buffer.
+
+
+EXAMPLE
+
+
+ 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.
+
+ SILC Buffer is not thread-safe. If the same SilcBuffer context must be
+ used in multithreaded environment concurrency control must be employed.
+
+
+SOURCE
+
+ typedef struct SilcBufferObject {
+ unsigned char *head;
+ unsigned char *data;
+ unsigned char *tail;
+ unsigned char *end;
+ } *SilcBuffer, SilcBufferStruct;
+
+ |