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