LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
CBindingWrapping.h
Go to the documentation of this file.
1 //===- llvm/Support/CBindingWrapph.h - C Interface Wrapping -----*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file declares the wrapping macros for the C interface.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LLVM_C_BINDING_WRAPPING_H
15 #define LLVM_C_BINDING_WRAPPING_H
16 
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