source: examples/gc_no_raii/src/internal/object_header.h @ 3d46f01

ADTarm-ehast-experimentalenumforall-pointer-decayjacob/cs343-translationnew-astnew-ast-unique-exprpthread-emulationqualifiedEnum
Last change on this file since 3d46f01 was bf71cfd, checked in by Thierry Delisle <tdelisle@…>, 6 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.