Mercurial > hg > aim92
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 } |