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