comparison tango/lib/gc/stub/gc.d @ 132:1700239cab2e trunk

[svn r136] MAJOR UNSTABLE UPDATE!!! Initial commit after moving to Tango instead of Phobos. Lots of bugfixes... This build is not suitable for most things.
author lindquist
date Fri, 11 Jan 2008 17:57:40 +0100
parents
children
comparison
equal deleted inserted replaced
131:5825d48b27d1 132:1700239cab2e
1 /**
2 * This module contains a minimal garbage collector implementation according to
3 * Tango requirements. This library is mostly intended to serve as an example,
4 * but it is usable in applications which do not rely on a garbage collector
5 * to clean up memory (ie. when dynamic array resizing is not used, and all
6 * memory allocated with 'new' is freed deterministically with 'delete').
7 *
8 * Please note that block attribute data must be tracked, or at a minimum, the
9 * FINALIZE bit must be tracked for any allocated memory block because calling
10 * rt_finalize on a non-object block can result in an access violation. In the
11 * allocator below, this tracking is done via a leading uint bitmask. A real
12 * allocator may do better to store this data separately, similar to the basic
13 * GC normally used by Tango.
14 *
15 * Copyright: Public Domain
16 * License: Public Domain
17 * Authors: Sean Kelly
18 */
19
20 private import tango.stdc.stdlib;
21
22 private
23 {
24 enum BlkAttr : uint
25 {
26 FINALIZE = 0b0000_0001,
27 NO_SCAN = 0b0000_0010,
28 NO_MOVE = 0b0000_0100,
29 ALL_BITS = 0b1111_1111
30 }
31
32 struct BlkInfo
33 {
34 void* base;
35 size_t size;
36 uint attr;
37 }
38
39 extern (C) void thread_init();
40 extern (C) void onOutOfMemoryError();
41 }
42
43 extern (C) void gc_init()
44 {
45 // NOTE: The GC must initialize the thread library before its first
46 // collection, and always before returning from gc_init().
47 thread_init();
48 }
49
50 extern (C) void gc_term()
51 {
52
53 }
54
55 extern (C) void gc_enable()
56 {
57
58 }
59
60 extern (C) void gc_disable()
61 {
62
63 }
64
65 extern (C) void gc_collect()
66 {
67
68 }
69
70 extern (C) uint gc_getAttr( void* p )
71 {
72 return 0;
73 }
74
75 extern (C) uint gc_setAttr( void* p, uint a )
76 {
77 return 0;
78 }
79
80 extern (C) uint gc_clrAttr( void* p, uint a )
81 {
82 return 0;
83 }
84
85 extern (C) void* gc_malloc( size_t sz, uint ba = 0 )
86 {
87 void* p = malloc( sz );
88
89 if( sz && p is null )
90 onOutOfMemoryError();
91 return p;
92 }
93
94 extern (C) void* gc_calloc( size_t sz, uint ba = 0 )
95 {
96 void* p = calloc( 1, sz );
97
98 if( sz && p is null )
99 onOutOfMemoryError();
100 return p;
101 }
102
103 extern (C) void* gc_realloc( void* p, size_t sz, uint ba = 0 )
104 {
105 p = realloc( p, sz );
106
107 if( sz && p is null )
108 onOutOfMemoryError();
109 return p;
110 }
111
112 extern (C) size_t gc_extend( void* p, size_t mx, size_t sz )
113 {
114 return 0;
115 }
116
117 extern (C) void gc_free( void* p )
118 {
119 free( p );
120 }
121
122 extern (C) void* gc_addrOf( void* p )
123 {
124 return null;
125 }
126
127 extern (C) size_t gc_sizeOf( void* p )
128 {
129 return 0;
130 }
131
132 extern (C) BlkInfo gc_query( void* p )
133 {
134 return BlkInfo.init;
135 }
136
137 extern (C) void gc_addRoot( void* p )
138 {
139
140 }
141
142 extern (C) void gc_addRange( void* p, size_t sz )
143 {
144
145 }
146
147 extern (C) void gc_removeRoot( void *p )
148 {
149
150 }
151
152 extern (C) void gc_removeRange( void *p )
153 {
154
155 }