47 void grow_from_front(size_t size); |
47 void grow_from_front(size_t size); |
48 void grow_from_back(size_t size); |
48 void grow_from_back(size_t size); |
49 }; |
49 }; |
50 |
50 |
51 class ZMemoryManager { |
51 class ZMemoryManager { |
|
52 public: |
|
53 typedef void (*CreateDestroyCallback)(const ZMemory* area); |
|
54 typedef void (*ResizeCallback)(const ZMemory* area, size_t size); |
|
55 |
|
56 struct Callbacks { |
|
57 CreateDestroyCallback _create; |
|
58 CreateDestroyCallback _destroy; |
|
59 ResizeCallback _shrink_from_front; |
|
60 ResizeCallback _shrink_from_back; |
|
61 ResizeCallback _grow_from_front; |
|
62 ResizeCallback _grow_from_back; |
|
63 |
|
64 Callbacks(); |
|
65 }; |
|
66 |
52 private: |
67 private: |
53 ZList<ZMemory> _freelist; |
68 ZList<ZMemory> _freelist; |
|
69 Callbacks _callbacks; |
|
70 |
|
71 ZMemory* create(uintptr_t start, size_t size); |
|
72 void destroy(ZMemory* area); |
|
73 void shrink_from_front(ZMemory* area, size_t size); |
|
74 void shrink_from_back(ZMemory* area, size_t size); |
|
75 void grow_from_front(ZMemory* area, size_t size); |
|
76 void grow_from_back(ZMemory* area, size_t size); |
54 |
77 |
55 public: |
78 public: |
|
79 ZMemoryManager(); |
|
80 |
|
81 void register_callbacks(const Callbacks& callbacks); |
|
82 |
56 uintptr_t alloc_from_front(size_t size); |
83 uintptr_t alloc_from_front(size_t size); |
57 uintptr_t alloc_from_front_at_most(size_t size, size_t* allocated); |
84 uintptr_t alloc_from_front_at_most(size_t size, size_t* allocated); |
58 uintptr_t alloc_from_back(size_t size); |
85 uintptr_t alloc_from_back(size_t size); |
59 uintptr_t alloc_from_back_at_most(size_t size, size_t* allocated); |
86 uintptr_t alloc_from_back_at_most(size_t size, size_t* allocated); |
|
87 |
60 void free(uintptr_t start, size_t size); |
88 void free(uintptr_t start, size_t size); |
61 }; |
89 }; |
62 |
90 |
63 #endif // SHARE_GC_Z_ZMEMORY_HPP |
91 #endif // SHARE_GC_Z_ZMEMORY_HPP |