Mercurial > hg > aim92
diff stitch/buffer.c @ 0:5242703e91d3 tip
Initial checkin for AIM92 aimR8.2 (last updated May 1997).
author | tomwalters |
---|---|
date | Fri, 20 May 2011 15:19:45 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/stitch/buffer.c Fri May 20 15:19:45 2011 +0100 @@ -0,0 +1,57 @@ +/* + buffer.c + ======== + + generic data buffer + +*/ + + +#include "stitch.h" +#include "buffer.h" + +Buffer NewBuffer( where ) +char where ; +{ + DeclareNew( Buffer, buffer ) ; + + buffer->size = 0 ; + buffer->refs = 1 ; + + return ( buffer ) ; +} + +Buffer SharedBuffer( buffer ) +Buffer buffer ; +{ + buffer->refs++ ; + + return ( buffer ) ; +} + +Buffer ResizedBuffer( buffer, size ) +Buffer buffer ; +unsigned size ; +{ + if( size > BufferSize( buffer ) || size == 0 ) { + + if( BufferSize( buffer ) != 0 ) + Free( BufferPointer( buffer ) ) ; + + SetBufferSize( buffer, size ) ; + + if( size != 0 ) + SetBufferPointer( buffer, Malloc( size, "buffer.c for buffer" ) ) ; + } + + return ( buffer ) ; +} + +void FreeBuffer( buffer ) +Buffer buffer ; +{ + if( --buffer->refs == 0 ) + Free( ResizedBuffer( buffer, 0 ) ) ; + + return ; +}