diff options
Diffstat (limited to 'engines/sci/include/heapmgr.h')
-rw-r--r-- | engines/sci/include/heapmgr.h | 113 |
1 files changed, 0 insertions, 113 deletions
diff --git a/engines/sci/include/heapmgr.h b/engines/sci/include/heapmgr.h deleted file mode 100644 index 074dfc695e..0000000000 --- a/engines/sci/include/heapmgr.h +++ /dev/null @@ -1,113 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -/* Heap-like managed structure */ - -#ifndef SCI_INCLUDE_HEAPMGR_H -#define SCI_INCLUDE_HEAPMGR_H - -#include "sci/tools.h" -#include "sci/sci_memory.h" - -namespace Sci { - -#define HEAPENTRY_INVALID -1 - -// FIXME: We write (i == 0 || i > 0) instead of (i >= 0) to silence certain annoying warnings: -// generated by GCC: "comparison is always true due to limited range of data type". -#define ENTRY_IS_VALID(t, i) ((i == 0 || i > 0) && (i) < (t)->max_entry && (t)->table[(i)].next_free == (i)) - -#define DECLARE_HEAPENTRY(ENTRY) \ -typedef struct { \ - int next_free; /* Only used for free entries */ \ - ENTRY##_t entry; \ -} ENTRY##_entry_t; \ - \ -typedef struct { \ - int entries_nr; /* Number of entries allocated */ \ - int first_free; /* Beginning of a singly linked list for entries */ \ - int entries_used; /* Statistical information */ \ - int max_entry; /* Highest entry used */ \ - ENTRY##_entry_t *table; \ -} ENTRY##_table_t; \ - \ -void init_##ENTRY##_table(ENTRY##_table_t *table); \ -int alloc_##ENTRY##_entry(ENTRY##_table_t *table); \ -void free_##ENTRY##_entry(ENTRY##_table_t *table, int index); - - - -#define DEFINE_HEAPENTRY_WITH_CLEANUP(ENTRY, INITIAL, INCREMENT, CLEANUP_FN) \ -void init_##ENTRY##_table(ENTRY##_table_t *table) { \ - table->entries_nr = INITIAL; \ - table->max_entry = 0; \ - table->entries_used = 0; \ - table->first_free = HEAPENTRY_INVALID; \ - table->table = (ENTRY##_entry_t *)sci_malloc(sizeof(ENTRY##_entry_t) * INITIAL);\ - memset(table->table, 0, sizeof(ENTRY##_entry_t) * INITIAL); \ -} \ - \ -void free_##ENTRY##_entry(ENTRY##_table_t *table, int index) { \ - ENTRY##_entry_t *e = table->table + index; \ - \ - if (index < 0 || index >= table->max_entry) { \ - fprintf(stderr, "heapmgr: Attempt to release" \ - " invalid table index %d!\n", index); \ - BREAKPOINT(); \ - } \ - CLEANUP_FN(&(e->entry)); \ - \ - e->next_free = table->first_free; \ - table->first_free = index; \ - table->entries_used--; \ -} \ - \ -int alloc_##ENTRY##_entry(ENTRY##_table_t *table) { \ - table->entries_used++; \ - if (table->first_free != HEAPENTRY_INVALID) { \ - int oldff = table->first_free; \ - table->first_free = table->table[oldff].next_free; \ - \ - table->table[oldff].next_free = oldff; \ - return oldff; \ - } else { \ - if (table->max_entry == table->entries_nr) { \ - table->entries_nr += INCREMENT; \ - \ - table->table = (ENTRY##_entry_t*)sci_realloc(table->table,\ - sizeof(ENTRY##_entry_t) * table->entries_nr); \ - memset(&table->table[table->entries_nr-INCREMENT], 0, INCREMENT*sizeof(ENTRY##_entry_t)); \ - } \ - table->table[table->max_entry].next_free = table->max_entry; /* Tag as 'valid' */ \ - return table->max_entry++; \ - } \ -} - -#define _HEAPENTRY_IGNORE_ME(x) -#define DEFINE_HEAPENTRY(e, i, p) DEFINE_HEAPENTRY_WITH_CLEANUP(e, i, p, _HEAPENTRY_IGNORE_ME) - -} // End of namespace Sci - -#endif // SCI_INCLUDE_HEAPMGR_H |