]> gitweb.factorcode.org Git - factor.git/blob - vm/tenured_space.hpp
Merge branch 'simd-cleanup' of git://factorcode.org/git/factor into simd-cleanup
[factor.git] / vm / tenured_space.hpp
1 namespace factor
2 {
3
4 struct tenured_space : free_list_allocator<object> {
5         object_start_map starts;
6
7         explicit tenured_space(cell size, cell start) :
8                 free_list_allocator<object>(size,start), starts(size,start) {}
9
10         object *allot(cell size)
11         {
12                 object *obj = free_list_allocator<object>::allot(size);
13                 if(obj)
14                 {
15                         starts.record_object_start_offset(obj);
16                         return obj;
17                 }
18                 else
19                         return NULL;
20         }
21
22         cell first_object()
23         {
24                 return (cell)next_allocated_block_after(this->first_block());
25         }
26
27         cell next_object_after(cell scan)
28         {
29                 cell size = ((object *)scan)->size();
30                 object *next = (object *)(scan + size);
31                 return (cell)next_allocated_block_after(next);
32         }
33
34         void clear_mark_bits()
35         {
36                 state.clear_mark_bits();
37         }
38
39         bool marked_p(object *obj)
40         {
41                 return this->state.marked_p(obj);
42         }
43
44         void set_marked_p(object *obj)
45         {
46                 this->state.set_marked_p(obj);
47         }
48
49         void sweep()
50         {
51                 free_list_allocator<object>::sweep();
52                 starts.update_for_sweep(&this->state);
53         }
54 };
55
56 }