source: examples/gc_no_raii/src/internal/state.h@ bcb14b5

ADT aaron-thesis arm-eh ast-experimental cleanup-dtors deferred_resn enum forall-pointer-decay jacob/cs343-translation jenkins-sandbox new-ast new-ast-unique-expr no_list persistent-indexer pthread-emulation qualifiedEnum
Last change on this file since bcb14b5 was 73abe95, checked in by Thierry Delisle <tdelisle@…>, 7 years ago

Replace extension-less headers with .hfa

  • Property mode set to 100644
File size: 1.3 KB
RevLine 
[e47f529]1#pragma once
2
[bee4283]3#ifdef __cforall
4extern "C" {
5#endif
[e47f529]6#include <stddef.h>
7#include <stdint.h>
[bee4283]8#ifdef __cforall
9}
10#endif
[73abe95]11#include <fstream.hfa>
[bee4283]12#include <vector>
[e47f529]13
14#include "tools.h"
[df4aea7]15
[4ef8fb3]16typedef vector(struct gc_memory_pool*, heap_allocator(struct gc_memory_pool*)) pools_table_t;
[e47f529]17
18struct gc_state
19{
20 bool is_initialized;
21 uint8_t from_code;
22 struct gc_memory_pool* to_space;
23 struct gc_memory_pool* from_space;
24
25 size_t total_space;
26 size_t used_space;
27
[4ef8fb3]28 pools_table_t pools_table;
[df4aea7]29 size_t pools_table_count;
[e47f529]30};
31
[16cfd8c]32void ctor(gc_state* const state);
33
34void dtor(gc_state* const state);
[e47f529]35
[385c130]36gc_state* gc_get_state();
[e47f529]37
[16cfd8c]38static inline bool gc_needs_collect(gc_state* state)
[e47f529]39{
[46f1d20]40 // sout | "Used Space: " | state->used_space | " bytes" | endl;
[e47f529]41 return state->used_space * 2 > state->total_space;
42}
43
[16cfd8c]44void gc_collect(gc_state* const this);
[e47f529]45
[16cfd8c]46void* gc_try_allocate(gc_state* const this, size_t size);
[e47f529]47
[16cfd8c]48void gc_allocate_pool(gc_state* const state);
[e47f529]49
[16cfd8c]50bool gc_is_in_heap(const gc_state* const state, const void* const address);
[e47f529]51
[16cfd8c]52bool gc_is_in_to_space(const gc_state* const state, const void* const address);
[e47f529]53
[16cfd8c]54static inline uint8_t gc_from_space_code(const gc_state *const this)
[e47f529]55{
[df4aea7]56 return this->from_code;
[e47f529]57}
58
59struct gc_object_header* gc_get_object_for_ref(gc_state* state, void*);
60
[16cfd8c]61static inline void gc_register_allocation(gc_state* state, size_t size)
[e47f529]62{
63 state->used_space += size;
64}
Note: See TracBrowser for help on using the repository browser.