Legate.jl
Loading...
Searching...
No Matches
types.h
Go to the documentation of this file.
1#pragma once
2
3#include "jlcxx/jlcxx.hpp"
4#include "legate.h"
5
6namespace legate_util {
7template <legate::Type::Code CODE>
9
10#define DEFINE_CODE_TO_CXX(code_enum, cxx_type) \
11 template <> \
12 struct code_to_cxx<legate::Type::Code::code_enum> { \
13 using type = cxx_type; \
14 };
15
16DEFINE_CODE_TO_CXX(BOOL, bool)
17DEFINE_CODE_TO_CXX(INT8, int8_t)
18DEFINE_CODE_TO_CXX(INT16, int16_t)
19DEFINE_CODE_TO_CXX(INT32, int32_t)
20DEFINE_CODE_TO_CXX(INT64, int64_t)
21DEFINE_CODE_TO_CXX(UINT8, uint8_t)
22DEFINE_CODE_TO_CXX(UINT16, uint16_t)
23DEFINE_CODE_TO_CXX(UINT32, uint32_t)
24DEFINE_CODE_TO_CXX(UINT64, uint64_t)
25#ifdef HAVE_CUDA
26DEFINE_CODE_TO_CXX(FLOAT16, __half)
27#else
28// Dummy type for FLOAT16 when CUDA is not available
29// This allows compilation but we throw an error if actually used
30struct __half_dummy {};
32#endif
33DEFINE_CODE_TO_CXX(FLOAT32, float)
34DEFINE_CODE_TO_CXX(FLOAT64, double)
35DEFINE_CODE_TO_CXX(COMPLEX64, std::complex<float>)
36DEFINE_CODE_TO_CXX(COMPLEX128, std::complex<double>)
37#undef DEFINE_CODE_TO_CXX
38} // namespace legate_util
39
40// Wraps the enums which define how legate
41// and cupynumeric types map to legion types
42void wrap_type_enums(jlcxx::Module&);
43
44// Wraps the legate functions which return the
45// specified legate::Type. (e.g. legate::int8())
46void wrap_type_getters(jlcxx::Module&);
47
48// Wraps the privilege modes used in
49// FieldAccessor (AcessorRO, AccessorWO)
50void wrap_privilege_modes(jlcxx::Module&);
Definition types.h:6
Definition types.h:30
Definition types.h:8
void wrap_type_enums(jlcxx::Module &)
Definition types.cpp:28
void wrap_privilege_modes(jlcxx::Module &)
Definition types.cpp:73
#define DEFINE_CODE_TO_CXX(code_enum, cxx_type)
Definition types.h:10
void wrap_type_getters(jlcxx::Module &)
Definition types.cpp:55