tomwalters@0: /* tomwalters@0: tomwalters@0: buffer.h tomwalters@0: ======== tomwalters@0: tomwalters@0: simple generic buffer abstraction. tomwalters@0: tomwalters@0: */ tomwalters@0: tomwalters@0: #define DeleteBuffer( _buffer ) ( FreeBuffer( _buffer ), _buffer = 0 ) tomwalters@0: tomwalters@0: #define BufferSize( _buffer ) ( ( _buffer )->size ) tomwalters@0: #define BufferPointer( _buffer ) ( ( _buffer )->addr ) tomwalters@0: #define SetBufferSize( _buffer, _size ) ( ( _buffer )->size = _size ) tomwalters@0: #define SetBufferPointer( _buffer, _addr ) ( ( _buffer )->addr = _addr ) tomwalters@0: #define SizedBufferPointer( _buffer, _size ) ( BufferPointer( ( ( _size ) > BufferSize( _buffer ) ) ? ResizedBuffer( _buffer, _size ) : _buffer ) ) tomwalters@0: tomwalters@0: typedef struct _buffer *Buffer ; tomwalters@0: tomwalters@0: tomwalters@0: struct _buffer { Pointer addr ; unsigned size, refs ; } ; tomwalters@0: tomwalters@0: extern Buffer NewBuffer( /* char where[] */ ) ; tomwalters@0: extern Buffer SharedBuffer( /* Buffer buffer */ ) ; tomwalters@0: extern Buffer ResizedBuffer( /* Buffer buffer, unsigned size */ ) ; tomwalters@0: extern void FreeBuffer( /* Buffer buffer */ ) ;