1
/* Copyright (C) 2001-2006 Artifex Software, Inc.
4
This software is provided AS-IS with no warranty, either express or
7
This software is distributed under license and may not be copied, modified
8
or distributed except as expressly authorized under the terms of that
9
license. Refer to licensing information at http://www.artifex.com/
10
or contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134,
11
San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.
14
/* $Id: igc.h 9043 2008-08-28 22:48:19Z giles $ */
15
/* Internal interfaces in Ghostscript GC */
22
/* Declare the vm_reclaim procedure for the real GC. */
23
extern vm_reclaim_proc(gs_gc_reclaim);
25
/* Define the procedures shared among a "genus" of structures. */
26
/* Currently there are only two genera: refs, and all other structures. */
27
struct struct_shared_procs_s {
29
/* Clear the relocation information in an object. */
31
#define gc_proc_clear_reloc(proc)\
32
void proc(obj_header_t *pre, uint size)
33
gc_proc_clear_reloc((*clear_reloc));
35
/* Compute any internal relocation for a marked object. */
36
/* Return true if the object should be kept. */
37
/* The reloc argument shouldn't be required, */
38
/* but we need it for ref objects. */
40
#define gc_proc_set_reloc(proc)\
41
bool proc(obj_header_t *pre, uint reloc, uint size)
42
gc_proc_set_reloc((*set_reloc));
44
/* Compact an object. */
46
#define gc_proc_compact(proc)\
47
void proc(const gs_memory_t *cmem, obj_header_t *pre, obj_header_t *dpre, uint size)
48
gc_proc_compact((*compact));
52
/* Define the structure for holding GC state. */
53
/*typedef struct gc_state_s gc_state_t; *//* in gsstruct.h */
54
#ifndef name_table_DEFINED
55
# define name_table_DEFINED
56
typedef struct name_table_s name_table;
59
const gc_procs_with_refs_t *procs; /* must be first */
62
int min_collect; /* avm_space */
63
bool relocating_untraced; /* if true, we're relocating */
64
/* pointers from untraced spaces */
65
gs_memory_t *heap; /* for extending mark stack */
66
name_table *ntable; /* (implicitly referenced by names) */
72
/* Exported by igcref.c for igc.c */
73
ptr_proc_unmark(ptr_ref_unmark);
74
ptr_proc_mark(ptr_ref_mark);
75
/*ref_packed *gs_reloc_ref_ptr(const ref_packed *, gc_state_t *); */
77
/* Exported by ilocate.c for igc.c */
78
void ialloc_validate_memory(const gs_ref_memory_t *, gc_state_t *);
79
void ialloc_validate_chunk(const chunk_t *, gc_state_t *);
80
void ialloc_validate_object(const obj_header_t *, const chunk_t *,
83
/* Exported by igc.c for ilocate.c */
84
const gs_memory_t * gcst_get_memory_ptr(gc_state_t *gcst);
86
/* Macro for returning a relocated pointer */
87
const void *print_reloc_proc(const void *obj, const char *cname,
90
# define print_reloc(obj, cname, nobj)\
91
(gs_debug_c('9') ? print_reloc_proc(obj, cname, nobj) : nobj)
93
# define print_reloc(obj, cname, nobj) (nobj)
96
#endif /* igc_INCLUDED */