source: src/libcfa/virtual.h @ 3e239ea

ADTaaron-thesisarm-ehast-experimentalcleanup-dtorsdeferred_resndemanglerenumforall-pointer-decayjacob/cs343-translationjenkins-sandboxnew-astnew-ast-unique-exprnew-envno_listpersistent-indexerpthread-emulationqualifiedEnumresolv-newwith_gc
Last change on this file since 3e239ea was a5f0529, checked in by Andrew Beach <ajbeach@…>, 7 years ago

Virtual casts have been added. They still require a lot of hand coded support to work but for simple cases it should be enough.

  • Property mode set to 100644
File size: 1.1 KB
Line 
1//
2// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
3//
4// The contents of this file are covered under the licence agreement in the
5// file "LICENCE" distributed with Cforall.
6//
7// virtual.h -- Builtins for hierarchy objects.
8//
9// Author           : Andrew Beach
10// Created On       : Tus Jul 11 15:08:00 2017
11// Last Modified By : Andrew Beach
12// Last Modified On : Wed Jul 26 14:18:00 2017
13// Update Count     : 1
14//
15
16#pragma once
17
18#ifdef __CFORALL__
19extern "C" {
20#endif
21
22// All strict/explicate vtables should have this head, showing their parent.
23struct __cfa__parent_vtable {
24    struct __cfa__parent_vtable const * const parent;
25};
26
27// Takes in two non-null pointers to type_objects.
28int __cfa__is_parent( struct __cfa__parent_vtable const * parent,
29                struct __cfa__parent_vtable const * child );
30
31// If parent is a parent of child then return child, otherwise return NULL.
32// Input pointers are none-null, child's first level should be an object with
33// a vtable
34void * __cfa__virtual_cast( struct __cfa__parent_vtable const * parent,
35                struct __cfa__parent_vtable const * const * child );
36
37#ifdef __CFORALL__
38}
39#endif
Note: See TracBrowser for help on using the repository browser.