Introduction to dynamic buffers

Description of flat and segmented buffers in Symbian platform.

A buffer is an area of memory which may contain data. Managing data in buffers can be more or less complex, depending on the requirements:

  • if the data is of fixed length, a fixed-length area of memory may be allocated, either on the stack or the heap; a buffer descriptor (TBuf) may be used for this.

  • if the data is of varying length, but the variation is relatively small, it may still be appropriate to allocate the data within a non-extensible buffer such as TBuf: programming is simple, and only a little memory is wasted

  • if the data is of significantly varying length, the memory can be allocated on the heap, and the allocation extended when necessary. The CBufFlat class is provided to manage this

  • if the data’s length varies so much that a single heap cell cannot reasonably be expected to hold it all, then the data must be held in several heap cells, but these must appear as one for convenience. The CBufSeg class is provided to manage this

Symbian platform provides flat buffers, objects of type CBufFlat, which are used to allocate and manage storage in a single allocated cell

Symbian platform provides segmented buffers, objects of type CBufSeg, which are used to allocate and manage storage in several alloc cells.

Both types of buffer have a common base class, CBufBase. This class specifies the main aspects of the programming interface. Having a common base class allows the decision as to whether to use flat or segmented buffers to be changed during program development, with minimal impact on code.