Thanks to visit codestin.com
Credit goes to llvm.org
LLVM
22.0.0git
include
llvm
Support
CBindingWrapping.h
Go to the documentation of this file.
1
//===- llvm/Support/CBindingWrapping.h - C Interface Wrapping ---*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// This file declares the wrapping macros for the C interface.
10
//
11
//===----------------------------------------------------------------------===//
12
13
#ifndef LLVM_SUPPORT_CBINDINGWRAPPING_H
14
#define LLVM_SUPPORT_CBINDINGWRAPPING_H
15
16
#include "
llvm-c/Types.h
"
17
#include "
llvm/Support/Casting.h
"
18
19
#define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
20
inline ty *unwrap(ref P) { \
21
return reinterpret_cast<ty*>(P); \
22
} \
23
\
24
inline ref wrap(const ty *P) { \
25
return reinterpret_cast<ref>(const_cast<ty*>(P)); \
26
}
27
28
#define DEFINE_ISA_CONVERSION_FUNCTIONS(ty, ref) \
29
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
30
\
31
template<typename T> \
32
inline T *unwrap(ref P) { \
33
return cast<T>(unwrap(P)); \
34
}
35
36
#define DEFINE_STDCXX_CONVERSION_FUNCTIONS(ty, ref) \
37
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
38
\
39
template<typename T> \
40
inline T *unwrap(ref P) { \
41
T *Q = (T*)unwrap(P); \
42
assert(Q && "Invalid cast!"); \
43
return Q; \
44
}
45
46
#endif
Casting.h
Types.h
Generated on
for LLVM by
1.14.0