annotate 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
rev   line source
tomwalters@0 1 /*
tomwalters@0 2 buffer.c
tomwalters@0 3 ========
tomwalters@0 4
tomwalters@0 5 generic data buffer
tomwalters@0 6
tomwalters@0 7 */
tomwalters@0 8
tomwalters@0 9
tomwalters@0 10 #include "stitch.h"
tomwalters@0 11 #include "buffer.h"
tomwalters@0 12
tomwalters@0 13 Buffer NewBuffer( where )
tomwalters@0 14 char where ;
tomwalters@0 15 {
tomwalters@0 16 DeclareNew( Buffer, buffer ) ;
tomwalters@0 17
tomwalters@0 18 buffer->size = 0 ;
tomwalters@0 19 buffer->refs = 1 ;
tomwalters@0 20
tomwalters@0 21 return ( buffer ) ;
tomwalters@0 22 }
tomwalters@0 23
tomwalters@0 24 Buffer SharedBuffer( buffer )
tomwalters@0 25 Buffer buffer ;
tomwalters@0 26 {
tomwalters@0 27 buffer->refs++ ;
tomwalters@0 28
tomwalters@0 29 return ( buffer ) ;
tomwalters@0 30 }
tomwalters@0 31
tomwalters@0 32 Buffer ResizedBuffer( buffer, size )
tomwalters@0 33 Buffer buffer ;
tomwalters@0 34 unsigned size ;
tomwalters@0 35 {
tomwalters@0 36 if( size > BufferSize( buffer ) || size == 0 ) {
tomwalters@0 37
tomwalters@0 38 if( BufferSize( buffer ) != 0 )
tomwalters@0 39 Free( BufferPointer( buffer ) ) ;
tomwalters@0 40
tomwalters@0 41 SetBufferSize( buffer, size ) ;
tomwalters@0 42
tomwalters@0 43 if( size != 0 )
tomwalters@0 44 SetBufferPointer( buffer, Malloc( size, "buffer.c for buffer" ) ) ;
tomwalters@0 45 }
tomwalters@0 46
tomwalters@0 47 return ( buffer ) ;
tomwalters@0 48 }
tomwalters@0 49
tomwalters@0 50 void FreeBuffer( buffer )
tomwalters@0 51 Buffer buffer ;
tomwalters@0 52 {
tomwalters@0 53 if( --buffer->refs == 0 )
tomwalters@0 54 Free( ResizedBuffer( buffer, 0 ) ) ;
tomwalters@0 55
tomwalters@0 56 return ;
tomwalters@0 57 }