view 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 source
/*
    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 ;
}