-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmemsys.h
63 lines (58 loc) · 2.99 KB
/
memsys.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/*----------------------------------------------------------------------
File : memsys.h
Contents: memory management system for equally sized (small) objects
Author : Christian Borgelt
History : 2004.12.10 file created from fpgrowth.c
2008.01.23 counting of used blocks added
2008.11.18 recording of maximum number of used blocks added
2010.07.30 arrays of unassigned objects added, ms_clear()
2010.08.03 state stack, functions ms_push(), ms_pop() added
2010.09.07 functions ms_error() and ms_reset() added
----------------------------------------------------------------------*/
#ifndef __MEMSYS__
#define __MEMSYS__
#include <stddef.h>
/*----------------------------------------------------------------------
Type Definitions
----------------------------------------------------------------------*/
typedef struct { /* --- memory system state --- */
void **next; /* next unassigned object */
void **curr; /* current memory block */
size_t used; /* number of used objects */
} MSSTATE; /* (memory system state) */
typedef struct { /* --- memory management system --- */
size_t size; /* size of an object (in void* units) */
size_t mbsz; /* size of a memory block */
size_t used; /* number of used objects */
size_t umax; /* maximum number of used objects */
void **free; /* list of free objects */
void **next; /* next unassigned object */
void **curr; /* current memory block */
void **list; /* list of allocated memory blocks */
int err; /* allocation error indicator */
int cap; /* stack capacity (maximum size) */
int top; /* top of stack (next free element) */
MSSTATE *stack; /* stack of memory system states */
} MEMSYS; /* (memory management system) */
/*----------------------------------------------------------------------
Functions
----------------------------------------------------------------------*/
extern MEMSYS* ms_create (size_t size, size_t cnt);
extern void ms_delete (MEMSYS *ms);
extern void ms_clear (MEMSYS *ms, int shrink);
extern void* ms_alloc (MEMSYS *ms);
extern void ms_free (MEMSYS *ms, void *obj);
extern int ms_push (MEMSYS *ms);
extern int ms_pop (MEMSYS *ms);
extern int ms_error (MEMSYS *ms);
extern int ms_reset (MEMSYS *ms);
extern size_t ms_used (MEMSYS *ms);
extern size_t ms_umax (MEMSYS *ms);
/*----------------------------------------------------------------------
Preprocessor Definitions
----------------------------------------------------------------------*/
#define ms_error(m) ((m)->err)
#define ms_reset(m) ((m)->err = 0)
#define ms_used(m) ((m)->used)
#define ms_umax(m) ((m)->umax)
#endif