source:
examples/gc_no_raii/src/internal/object_header.h@
ede87c6
| Last change on this file since ede87c6 was bf71cfd, checked in by , 7 years ago | |
|---|---|
|
|
| File size: 1.0 KB | |
| Rev | Line | |
|---|---|---|
| [15db1ab] | 1 | #pragma once |
| 2 | ||
| [1b5c81ed] | 3 | #include <stdbool.h> |
| [e47f529] | 4 | #include <stddef.h> |
| [15db1ab] | 5 | #include <stdint.h> |
| 6 | ||
| 7 | #include "tools.h" | |
| 8 | ||
| [46f1d20] | 9 | #ifndef NDEBUG |
| 10 | static void* const CANARY_VALUE = (void*)0xCAFEBABACAFEBABA; | |
| [6be0cf9] | 11 | #endif |
| [15db1ab] | 12 | |
| 13 | struct gcpointer_t; | |
| [6be0cf9] | 14 | struct gc_object_header; |
| [15db1ab] | 15 | |
| 16 | struct gc_object_header | |
| 17 | { | |
| [46f1d20] | 18 | #ifndef NDEBUG |
| [15db1ab] | 19 | void* canary_start; |
| 20 | #endif | |
| 21 | ||
| [6be0cf9] | 22 | size_t size; |
| 23 | gcpointer_t* root_chain; | |
| 24 | gcpointer_t* type_chain; | |
| 25 | gc_object_header* forward; | |
| 26 | bool is_forwarded; | |
| [15db1ab] | 27 | |
| [46f1d20] | 28 | #ifndef NDEBUG |
| [15db1ab] | 29 | void* canary_end; |
| 30 | #endif | |
| 31 | }; | |
| [6be0cf9] | 32 | |
| [16cfd8c] | 33 | void ctor(gc_object_header* const this, size_t size); |
| 34 | void copy_ctor(gc_object_header* const this, const gc_object_header* const other); | |
| 35 | ||
| 36 | static inline gc_object_header* placement_ctor(void* address, size_t size) | |
| 37 | { | |
| 38 | gc_object_header* const this = (gc_object_header* const) address; | |
| 39 | ctor(this, size); | |
| 40 | return this; | |
| 41 | } | |
| 42 | ||
| 43 | static inline gc_object_header* placement_copy_ctor(void* address, const gc_object_header* const other) | |
| 44 | { | |
| 45 | gc_object_header* const this = (gc_object_header* const) address; | |
| 46 | copy_ctor(this, other); | |
| 47 | return this; | |
| 48 | } | |
| [46f1d20] | 49 | |
| 50 | #ifndef NDEBUG | |
| [76af36f] | 51 | bool is_valid(const gc_object_header* const this); |
| [46f1d20] | 52 | #endif |
Note:
See TracBrowser
for help on using the repository browser.