Loading...
Searching...
No Matches
25#include "iceberg/result.h"
27#define ICEBERG_RETURN_UNEXPECTED(expr) \
28 if (auto&& result_name = expr; !result_name) [[unlikely]] { \
29 return std::unexpected<Error>(result_name.error()); \
32#define ICEBERG_ASSIGN_OR_RAISE_IMPL(result_name, lhs, rexpr) \
33 auto&& result_name = (rexpr); \
34 ICEBERG_RETURN_UNEXPECTED(result_name) \
35 lhs = std::move(result_name.value());
37#define ICEBERG_CONCAT(x, y) x##y
39#define ICEBERG_ASSIGN_OR_RAISE_NAME(x, y) ICEBERG_CONCAT(x, y)
41#define ICEBERG_ASSIGN_OR_RAISE(lhs, rexpr) \
42 ICEBERG_ASSIGN_OR_RAISE_IMPL(ICEBERG_ASSIGN_OR_RAISE_NAME(result_, __COUNTER__), lhs, \
46#define ICEBERG_DCHECK(expr, message) assert((expr) && (message))
49#define ICEBERG_PRECHECK(expr, ...) \
51 if (!(expr)) [[unlikely]] { \
52 return InvalidArgument(__VA_ARGS__); \
57#define ICEBERG_CHECK(expr, ...) \
59 if (!(expr)) [[unlikely]] { \
60 return ValidationFailed(__VA_ARGS__); \
64#define ERROR_TO_EXCEPTION(error) \
65 if (error.kind == iceberg::ErrorKind::kInvalidExpression) { \
66 throw iceberg::ExpressionError(error.message); \
68 throw iceberg::IcebergError(error.message); \
71#define ICEBERG_THROW_NOT_OK(expr) \
72 if (auto&& result_name = expr; !result_name) [[unlikely]] { \
73 ERROR_TO_EXCEPTION(result_name.error()); \
76#define ICEBERG_ASSIGN_OR_THROW_IMPL(result_name, lhs, rexpr) \
77 auto&& result_name = (rexpr); \
78 ICEBERG_THROW_NOT_OK(result_name); \
79 lhs = std::move(result_name.value());
81#define ICEBERG_ASSIGN_OR_THROW(lhs, rexpr) \
82 ICEBERG_ASSIGN_OR_THROW_IMPL( \
83 ICEBERG_ASSIGN_OR_RAISE_NAME(_error_or_value, __COUNTER__), lhs, rexpr);