stdgpu/contract.h Source File — stdgpu Latest documentation (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#ifndef STDGPU_CONTRACT_H
17#define STDGPU_CONTRACT_H
18
28#include
29#include
30#include
31
33#include <stdgpu/config.h>
36
38
39#if STDGPU_DEVICE_COMPILER == STDGPU_DEVICE_COMPILER_CUDACLANG
40namespace std
41{
42STDGPU_CUDA_DEVICE_ONLY void
43terminate()
44{
45
46}
47}
48#endif
50
51namespace stdgpu
52{
53
71#define STDGPU_DETAIL_EMPTY_STATEMENT (void)0
73
74#if STDGPU_ENABLE_CONTRACT_CHECKS
75
76 #define STDGPU_DETAIL_HOST_CHECK(type, ...) \
77 if (!(__VA_ARGS__)) \
78 { \
79 printf("stdgpu : " type " failure :\n" \
80 " File : %s:%d\n" \
81 " Function : %s\n" \
82 " Condition : %s\n", \
83 __FILE__, \
84 __LINE__, \
85 static_cast<const char*>(STDGPU_FUNC), \
86 #__VA_ARGS__); \
87 std::terminate(); \
88 } \
89 STDGPU_DETAIL_EMPTY_STATEMENT
90
91 #define STDGPU_DETAIL_HOST_EXPECTS(...) STDGPU_DETAIL_HOST_CHECK("Precondition", __VA_ARGS__)
92 #define STDGPU_DETAIL_HOST_ENSURES(...) STDGPU_DETAIL_HOST_CHECK("Postcondition", __VA_ARGS__)
93 #define STDGPU_DETAIL_HOST_ASSERT(...) STDGPU_DETAIL_HOST_CHECK("Assertion", __VA_ARGS__)
94
95 #define STDGPU_DETAIL_DEVICE_CHECK(...) assert((__VA_ARGS__))
96
97 #define STDGPU_DETAIL_DEVICE_EXPECTS(...) STDGPU_DETAIL_DEVICE_CHECK(__VA_ARGS__)
98 #define STDGPU_DETAIL_DEVICE_ENSURES(...) STDGPU_DETAIL_DEVICE_CHECK(__VA_ARGS__)
99 #define STDGPU_DETAIL_DEVICE_ASSERT(...) STDGPU_DETAIL_DEVICE_CHECK(__VA_ARGS__)
100
101 #if STDGPU_CODE == STDGPU_CODE_DEVICE
102 #define STDGPU_EXPECTS(...) STDGPU_DETAIL_DEVICE_EXPECTS(__VA_ARGS__)
103 #define STDGPU_ENSURES(...) STDGPU_DETAIL_DEVICE_ENSURES(__VA_ARGS__)
104 #define STDGPU_ASSERT(...) STDGPU_DETAIL_DEVICE_ASSERT(__VA_ARGS__)
105 #else
106 #define STDGPU_EXPECTS(...) STDGPU_DETAIL_HOST_EXPECTS(__VA_ARGS__)
107 #define STDGPU_ENSURES(...) STDGPU_DETAIL_HOST_ENSURES(__VA_ARGS__)
108 #define STDGPU_ASSERT(...) STDGPU_DETAIL_HOST_ASSERT(__VA_ARGS__)
109 #endif
110#else
111 #define STDGPU_EXPECTS(...) STDGPU_DETAIL_EMPTY_STATEMENT
112 #define STDGPU_ENSURES(...) STDGPU_DETAIL_EMPTY_STATEMENT
113 #define STDGPU_ASSERT(...) STDGPU_DETAIL_EMPTY_STATEMENT
114#endif
115
116}
117
118#endif