annotate libphobos/libdruntime/gc/gcinterface.d @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
1 /**
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
2 * Contains the internal GC interface.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
3 *
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
4 * Copyright: Copyright Digital Mars 2016.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
5 * License: $(WEB www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
6 * Authors: Walter Bright, Sean Kelly, Jeremy DeHaan
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
7 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
8
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
9 /* Copyright Digital Mars 2016.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
10 * Distributed under the Boost Software License, Version 1.0.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
11 * (See accompanying file LICENSE or copy at
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
12 * http://www.boost.org/LICENSE_1_0.txt)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
13 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
14 module gc.gcinterface;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
15
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
16 static import core.memory;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
17 alias BlkAttr = core.memory.GC.BlkAttr;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
18 alias BlkInfo = core.memory.GC.BlkInfo;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
19
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
20 alias RootIterator = int delegate(scope int delegate(ref Root) nothrow dg);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
21 alias RangeIterator = int delegate(scope int delegate(ref Range) nothrow dg);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
22
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
23
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
24 struct Root
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
25 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
26 void* proot;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
27 alias proot this;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
28 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
29
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
30 struct Range
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
31 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
32 void* pbot;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
33 void* ptop;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
34 TypeInfo ti; // should be tail const, but doesn't exist for references
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
35 alias pbot this; // only consider pbot for relative ordering (opCmp)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
36 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
37
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
38 interface GC
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
39 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
40
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
41 /*
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
42 *
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
43 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
44 void Dtor();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
45
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
46 /**
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
47 *
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
48 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
49 void enable();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
50
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
51 /**
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
52 *
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
53 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
54 void disable();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
55
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
56 /**
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
57 *
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
58 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
59 void collect() nothrow;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
60
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
61 /**
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
62 *
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
63 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
64 void collectNoStack() nothrow;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
65
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
66 /**
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
67 * minimize free space usage
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
68 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
69 void minimize() nothrow;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
70
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
71 /**
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
72 *
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
73 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
74 uint getAttr(void* p) nothrow;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
75
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
76 /**
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
77 *
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
78 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
79 uint setAttr(void* p, uint mask) nothrow;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
80
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
81 /**
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
82 *
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
83 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
84 uint clrAttr(void* p, uint mask) nothrow;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
85
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
86 /**
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
87 *
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
88 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
89 void* malloc(size_t size, uint bits, const TypeInfo ti) nothrow;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
90
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
91 /*
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
92 *
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
93 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
94 BlkInfo qalloc(size_t size, uint bits, const TypeInfo ti) nothrow;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
95
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
96 /*
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
97 *
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
98 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
99 void* calloc(size_t size, uint bits, const TypeInfo ti) nothrow;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
100
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
101 /*
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
102 *
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
103 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
104 void* realloc(void* p, size_t size, uint bits, const TypeInfo ti) nothrow;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
105
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
106 /**
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
107 * Attempt to in-place enlarge the memory block pointed to by p by at least
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
108 * minsize bytes, up to a maximum of maxsize additional bytes.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
109 * This does not attempt to move the memory block (like realloc() does).
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
110 *
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
111 * Returns:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
112 * 0 if could not extend p,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
113 * total size of entire memory block if successful.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
114 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
115 size_t extend(void* p, size_t minsize, size_t maxsize, const TypeInfo ti) nothrow;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
116
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
117 /**
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
118 *
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
119 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
120 size_t reserve(size_t size) nothrow;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
121
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
122 /**
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
123 *
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
124 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
125 void free(void* p) nothrow;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
126
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
127 /**
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
128 * Determine the base address of the block containing p. If p is not a gc
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
129 * allocated pointer, return null.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
130 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
131 void* addrOf(void* p) nothrow;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
132
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
133 /**
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
134 * Determine the allocated size of pointer p. If p is an interior pointer
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
135 * or not a gc allocated pointer, return 0.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
136 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
137 size_t sizeOf(void* p) nothrow;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
138
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
139 /**
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
140 * Determine the base address of the block containing p. If p is not a gc
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
141 * allocated pointer, return null.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
142 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
143 BlkInfo query(void* p) nothrow;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
144
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
145 /**
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
146 * Retrieve statistics about garbage collection.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
147 * Useful for debugging and tuning.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
148 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
149 core.memory.GC.Stats stats() nothrow;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
150
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
151 /**
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
152 * add p to list of roots
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
153 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
154 void addRoot(void* p) nothrow @nogc;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
155
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
156 /**
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
157 * remove p from list of roots
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
158 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
159 void removeRoot(void* p) nothrow @nogc;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
160
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
161 /**
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
162 *
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
163 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
164 @property RootIterator rootIter() @nogc;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
165
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
166 /**
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
167 * add range to scan for roots
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
168 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
169 void addRange(void* p, size_t sz, const TypeInfo ti) nothrow @nogc;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
170
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
171 /**
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
172 * remove range
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
173 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
174 void removeRange(void* p) nothrow @nogc;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
175
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
176 /**
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
177 *
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
178 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
179 @property RangeIterator rangeIter() @nogc;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
180
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
181 /**
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
182 * run finalizers
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
183 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
184 void runFinalizers(in void[] segment) nothrow;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
185
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
186 /*
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
187 *
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
188 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
189 bool inFinalizer() nothrow;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
190 }