mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-08 11:57:25 +00:00
126 lines
3.3 KiB
C
126 lines
3.3 KiB
C
/***************************************************************************
|
|
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 "sci/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 */
|