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 } |
