source: examples/gc_no_raii/src/internal/object_header.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 bf71cfd, checked in by Thierry Delisle <tdelisle@…>, 7 years ago

Moved up many directories in source

  • Property mode set to 100644
File size: 1.0 KB
RevLine 
[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
13struct gcpointer_t;
[6be0cf9]14struct gc_object_header;
[15db1ab]15
16struct 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]33void ctor(gc_object_header* const this, size_t size);
34void copy_ctor(gc_object_header* const this, const gc_object_header* const other);
35
36static 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
43static 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.