MLIR
22.0.0git
include
mlir
CAPI
Wrap.h
Go to the documentation of this file.
1
//===- Wrap.h - C API Utilities ---------------------------------*- 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 contains common definitions for wrapping opaque C++ pointers into
10
// C structures for the purpose of C API. This file should not be included from
11
// C++ code other than C API implementation nor from C code.
12
//
13
//===----------------------------------------------------------------------===//
14
15
#ifndef MLIR_CAPI_WRAP_H
16
#define MLIR_CAPI_WRAP_H
17
18
#include "
mlir-c/IR.h
"
19
#include "
mlir/Support/LLVM.h
"
20
21
//===----------------------------------------------------------------------===//
22
// Definitions of methods for non-owning structures used in C API.
23
//===----------------------------------------------------------------------===//
24
25
#define DEFINE_C_API_PTR_METHODS(name, cpptype) \
26
static inline name wrap(cpptype *cpp) { return name{cpp}; } \
27
static inline cpptype *unwrap(name c) { \
28
return static_cast<cpptype *>(c.ptr); \
29
}
30
31
#define DEFINE_C_API_METHODS(name, cpptype) \
32
static inline name wrap(cpptype cpp) { \
33
return name{cpp.getAsOpaquePointer()}; \
34
} \
35
static inline cpptype unwrap(name c) { \
36
return cpptype::getFromOpaquePointer(c.ptr); \
37
}
38
39
template
<
typename
CppTy,
typename
CTy>
40
static
llvm::ArrayRef<CppTy>
unwrapList
(
size_t
size, CTy *first,
41
llvm::SmallVectorImpl<CppTy>
&storage) {
42
static_assert
(
43
std::is_same<decltype(unwrap(std::declval<CTy>())), CppTy>::value,
44
"incompatible C and C++ types"
);
45
46
if
(size == 0)
47
return
{};
48
49
assert(storage.empty() &&
"expected to populate storage"
);
50
storage.reserve(size);
51
for
(
size_t
i = 0; i < size; ++i)
52
storage.push_back(
unwrap
(*(first + i)));
53
return
storage;
54
}
55
56
#endif
// MLIR_CAPI_WRAP_H
unwrapList
static llvm::ArrayRef< CppTy > unwrapList(size_t size, CTy *first, llvm::SmallVectorImpl< CppTy > &storage)
Definition
Wrap.h:40
llvm::ArrayRef
Definition
LLVM.h:48
llvm::SmallVectorImpl
Definition
LLVM.h:74
unwrap
mlir::Diagnostic & unwrap(MlirDiagnostic diagnostic)
Definition
Diagnostics.h:19
IR.h
LLVM.h
Generated on
for MLIR by
1.14.0