diff options
Diffstat (limited to 'engines/sci/engine/heap.h')
-rw-r--r-- | engines/sci/engine/heap.h | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/engines/sci/engine/heap.h b/engines/sci/engine/heap.h new file mode 100644 index 0000000000..afd2db5c58 --- /dev/null +++ b/engines/sci/engine/heap.h @@ -0,0 +1,125 @@ +/*************************************************************************** + heap.h Copyright (C) 1999,2000,01 Magnus Reftel, Christoph Reichenbach + + + This program may be modified and copied freely according to the terms of + the GNU general public license (GPL), as long as the above copyright + notice and the licensing information contained herein are preserved. + + Please refer to www.gnu.org for licensing details. + + This work is provided AS IS, without warranty of any kind, expressed or + implied, including but not limited to the warranties of merchantibility, + noninfringement, and fitness for a specific purpose. The author will not + be held liable for any damage caused by this work or derivatives of it. + + By using this source code, you agree to the licensing terms as stated + above. + + + Please contact the maintainer for bug reports or inquiries. + + Current Maintainer: + + Christoph Reichenbach (CJR) [jameson@linuxgames.com] + +***************************************************************************/ + +#ifndef _SCI_HEAP_H +#define _SCI_HEAP_H + +#include <resource.h> + +#define SCI_HEAP_SIZE 0x10000 + +typedef guint16 heap_ptr; + + +typedef struct +{ + byte* start; + byte* base; + unsigned int first_free; + int old_ff; +} heap_t; + +heap_t* +heap_new(); +/* Allocates a new heap. +** Parameters: (void) +** Returns : (heap_t *) A new 0xffff-sized heap +*/ + +void +heap_del(heap_t* h); +/* Frees an allocated heap +** Parameters: (heap_t *) h: The heap to unallocate +** Returns : (void) +*/ + +int +heap_meminfo(heap_t* h); +/* Returns the total number of free bytes on the heap +** Parameters: (heap_t *) h: The heap to check +** Returns : (int) The total free space in bytes +*/ + +int +heap_largest(heap_t* h); +/* Returns the block size of the largest free block on the heap +** Parameters: (heap_t *) h: The heap to check +** Returns : (int) The size of the largest free block +*/ + +heap_ptr +heap_allocate(heap_t* h, int size); +/* Allocates memory on a heap. +** Parameters: (heap_t *) h: The heap to work with +** (int) size: The block size to allocate +** Returns : (heap_ptr): The heap pointer to the new block, or 0 on failure +*/ + +void +heap_free(heap_t* h, unsigned int m); +/* Frees allocated heap memory. +** Parameters: (heap_t *) h: The heap to work with +** (int) m: The handle at which memory is to be unallocated +** Returns : (void) +** This function automatically prevents fragmentation from happening. +*/ + +void +save_ff(heap_t* h); +/* Stores the current first free position +** Parameters: (heap_t *) h: The heap which is to be manipulated +** Returns : (void) +** This function can be used to save the heap state for later restoration (see +** the next function) +*/ + +void +restore_ff(heap_t* h); +/* Restores the first free heap state +** Parameters: (heap_t *) h: The heap to restore +** Returns : (void) +** Restoring the first free state will reset the heap to the position stored +** when save_ff() was called, if and only if none of the blocks allocated before +** save_ff() was called was ever freed ("ever" includes "before save_ff() was +** called"). +*/ + +void +heap_dump_free(heap_t *h); +/* Dumps debugging information about the stack +** Parameters: (heap_t *) h: The heap to check +** Returns : (void) +*/ + +void +heap_dump_all(heap_t *h); +/* Dumps all allocated/unallocated zones on the heap +** Parameters: (heap_t *) h: The heap to check +** Returns : (void) +*/ + +#endif /* !_SCI_HEAP_H */ |