Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/planix-v0/sys/src/cmd/gs/src/gsstype.h – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
/* Copyright (C) 1999 Aladdin Enterprises.  All rights reserved.
2
 
3
  This software is provided AS-IS with no warranty, either express or
4
  implied.
5
 
6
  This software is distributed under license and may not be copied,
7
  modified or distributed except as expressly authorized under the terms
8
  of the license contained in the file LICENSE in this distribution.
9
 
10
  For more information about licensing, please refer to
11
  http://www.ghostscript.com/licensing/. For information on
12
  commercial licensing, go to http://www.artifex.com/licensing/ or
13
  contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14
  San Rafael, CA  94903, U.S.A., +1(415)492-9861.
15
*/
16
 
17
/* $Id: gsstype.h,v 1.6 2004/08/04 19:36:12 stefan Exp $ */
18
/* Definition of structure type descriptors and extern_st */
19
 
20
#ifndef gsstype_INCLUDED
21
#  define gsstype_INCLUDED
22
 
23
/* Define an opaque type for the garbage collector state. */
24
typedef struct gc_state_s gc_state_t;
25
 
26
/*
27
 * Define the structure used to return an enumerated pointer.  Ordinary
28
 * object pointers use only the ptr element; strings also use size.
29
 */
30
typedef struct enum_ptr_s {
31
    const void *ptr;
32
    uint size;
33
} enum_ptr_t;
34
 
35
/*
36
 * The first argument of enum_ptrs procedures formerly was not const *, and
37
 * EV_CONST was defined as empty.  Unfortunately, changing EV_CONST to const
38
 * produced many compiler warnings from places that cast this argument to a
39
 * non-const non-void pointer type.
40
 */
41
#define EV_CONST const
42
 
43
/* Define the procedures for structure types. */
44
 
45
		/* Clear the marks of a structure. */
46
 
47
#define struct_proc_clear_marks(proc)\
48
  void proc(const gs_memory_t *cmem, void /*obj_header_t*/ *pre, uint size,\
49
    const gs_memory_struct_type_t *pstype)
50
 
51
		/* Enumerate the pointers in a structure. */
52
 
53
#define struct_proc_enum_ptrs(proc)\
54
  gs_ptr_type_t proc(const gs_memory_t *mem, EV_CONST void /*obj_header_t*/ *ptr, uint size,\
55
    int index, enum_ptr_t *pep, const gs_memory_struct_type_t *pstype,\
56
    gc_state_t *gcst)
57
 
58
		/* Relocate all the pointers in this structure. */
59
 
60
#define struct_proc_reloc_ptrs(proc)\
61
  void proc(void /*obj_header_t*/ *ptr, uint size,\
62
    const gs_memory_struct_type_t *pstype, gc_state_t *gcst)
63
 
64
		/*
65
		 * Finalize this structure just before freeing it.
66
		 * Finalization procedures must not allocate or resize
67
		 * any objects in any space managed by the allocator,
68
		 * and must not assume that any objects in such spaces
69
		 * referenced by this structure still exist.  However,
70
		 * finalization procedures may free such objects, and
71
		 * may allocate, free, and reference objects allocated
72
		 * in other ways, such as objects allocated with malloc
73
		 * by libraries.
74
		 */
75
 
76
#define struct_proc_finalize(proc)\
77
  void proc(void /*obj_header_t*/ *ptr)
78
 
79
/*
80
 * A descriptor for an object (structure) type.
81
 */
82
typedef struct struct_shared_procs_s struct_shared_procs_t;
83
 
84
struct gs_memory_struct_type_s {
85
	uint ssize;
86
	struct_name_t sname;
87
 
88
	/* ------ Procedures shared among many structure types. ------ */
89
	/* Note that this pointer is usually 0. */
90
 
91
	const struct_shared_procs_t *shared;
92
 
93
	/* ------ Procedures specific to this structure type. ------ */
94
 
95
	struct_proc_clear_marks((*clear_marks));
96
	struct_proc_enum_ptrs((*enum_ptrs));
97
	struct_proc_reloc_ptrs((*reloc_ptrs));
98
	struct_proc_finalize((*finalize));
99
 
100
	/* A pointer to additional data for the above procedures. */
101
 
102
	const void *proc_data;
103
};
104
 
105
/*
106
 * Because of bugs in some compilers' bookkeeping for undefined structure
107
 * types, any file that uses extern_st must include this file.
108
 * (If it weren't for these bugs, the definition of extern_st could
109
 * go in gsmemory.h.)
110
 */
111
#define extern_st(st) extern const gs_memory_struct_type_t st
112
 
113
#endif /* gsstype_INCLUDED */