1#pragma once
 2
 3/*
 4 * Convert PwValue to a C type
 5 */
 6
 7#include <pw_types.h>
 8#include <pw_status.h>
 9
10#ifdef __cplusplus
11extern "C" {
12#endif
13
14[[nodiscard]] bool pw_as_bool(PwValuePtr value, bool* result);
15
16#define pw_as_char(value, result)      _pw_as_char     ((value), (result), false)
17#define pw_as_uchar(value, result)     _pw_as_uchar    ((value), (result), false)
18#define pw_as_short(value, result)     _pw_as_short    ((value), (result), false)
19#define pw_as_ushort(value, result)    _pw_as_ushort   ((value), (result), false)
20#define pw_as_int(value, result)       _pw_as_int      ((value), (result), false)
21#define pw_as_unsigned(value, result)  _pw_as_unsigned ((value), (result), false)
22#define pw_as_long(value, result)      _pw_as_long     ((value), (result), false)
23#define pw_as_ulong(value, result)     _pw_as_ulong    ((value), (result), false)
24#define pw_as_longlong(value, result)  _pw_as_longlong ((value), (result), false)
25#define pw_as_ulonglong(value, result) _pw_as_ulonglong((value), (result), false)
26#define pw_as_int8(value, result)      _pw_as_int8     ((value), (result), false)
27#define pw_as_uint8(value, result)     _pw_as_uint8    ((value), (result), false)
28#define pw_as_int16(value, result)     _pw_as_int16    ((value), (result), false)
29#define pw_as_uint16(value, result)    _pw_as_uint16   ((value), (result), false)
30#define pw_as_int32(value, result)     _pw_as_int32    ((value), (result), false)
31#define pw_as_uint32(value, result)    _pw_as_uint32   ((value), (result), false)
32#define pw_as_int64(value, result)     _pw_as_int64    ((value), (result), false)
33#define pw_as_uint64(value, result)    _pw_as_uint64   ((value), (result), false)
34#define pw_as_float(value, result)     _pw_as_float    ((value), (result), false)
35#define pw_as_double(value, result)    _pw_as_double   ((value), (result), false)
36#define pw_as_size_t(value, result)    _pw_as_size_t   ((value), (result), false)
37#define pw_as_ssize_t(value, result)   _pw_as_ssize_t  ((value), (result), false)
38#define pw_as_ptrdiff_t(value, result) _pw_as_ptrdiff_t((value), (result), false)
39#define pw_as_uintptr_t(value, result) _pw_as_uintptr_t((value), (result), false)
40
41#define pw_as_char_with_overflow(value, result)      _pw_as_char     ((value), (result), true)
42#define pw_as_uchar_with_overflow(value, result)     _pw_as_uchar    ((value), (result), true)
43#define pw_as_short_with_overflow(value, result)     _pw_as_short    ((value), (result), true)
44#define pw_as_ushort_with_overflow(value, result)    _pw_as_ushort   ((value), (result), true)
45#define pw_as_int_with_overflow(value, result)       _pw_as_int      ((value), (result), true)
46#define pw_as_unsigned_with_overflow(value, result)  _pw_as_unsigned ((value), (result), true)
47#define pw_as_long_with_overflow(value, result)      _pw_as_long     ((value), (result), true)
48#define pw_as_ulong_with_overflow(value, result)     _pw_as_ulong    ((value), (result), true)
49#define pw_as_longlong_with_overflow(value, result)  _pw_as_longlong ((value), (result), true)
50#define pw_as_ulonglong_with_overflow(value, result) _pw_as_ulonglong((value), (result), true)
51#define pw_as_int8_with_overflow(value, result)      _pw_as_int8     ((value), (result), true)
52#define pw_as_uint8_with_overflow(value, result)     _pw_as_uint8    ((value), (result), true)
53#define pw_as_int16_with_overflow(value, result)     _pw_as_int16    ((value), (result), true)
54#define pw_as_uint16_with_overflow(value, result)    _pw_as_uint16   ((value), (result), true)
55#define pw_as_int32_with_overflow(value, result)     _pw_as_int32    ((value), (result), true)
56#define pw_as_uint32_with_overflow(value, result)    _pw_as_uint32   ((value), (result), true)
57#define pw_as_int64_with_overflow(value, result)     _pw_as_int64    ((value), (result), true)
58#define pw_as_uint64_with_overflow(value, result)    _pw_as_uint64   ((value), (result), true)
59#define pw_as_float_with_overflow(value, result)     _pw_as_float    ((value), (result), true)
60#define pw_as_double_with_overflow(value, result)    _pw_as_double   ((value), (result), true)
61#define pw_as_size_t_with_overflow(value, result)    _pw_as_size_t   ((value), (result), true)
62#define pw_as_ssize_t_with_overflow(value, result)   _pw_as_ssize_t  ((value), (result), true)
63#define pw_as_ptrdiff_t_with_overflow(value, result) _pw_as_ptrdiff_t((value), (result), true)
64#define pw_as_uintptr_t_with_overflow(value, result) _pw_as_uintptr_t((value), (result), true)
65
66[[nodiscard]] bool _pw_as_char     (PwValuePtr value, char*           result, bool allow_overflow);
67[[nodiscard]] bool _pw_as_uchar    (PwValuePtr value, unsigned char*  result, bool allow_overflow);
68[[nodiscard]] bool _pw_as_short    (PwValuePtr value, short*          result, bool allow_overflow);
69[[nodiscard]] bool _pw_as_ushort   (PwValuePtr value, unsigned short* result, bool allow_overflow);
70[[nodiscard]] bool _pw_as_int      (PwValuePtr value, int*            result, bool allow_overflow);
71[[nodiscard]] bool _pw_as_unsigned (PwValuePtr value, unsigned*       result, bool allow_overflow);
72[[nodiscard]] bool _pw_as_long     (PwValuePtr value, long*           result, bool allow_overflow);
73[[nodiscard]] bool _pw_as_ulong    (PwValuePtr value, unsigned long*  result, bool allow_overflow);
74[[nodiscard]] bool _pw_as_longlong (PwValuePtr value, long long*      result, bool allow_overflow);
75[[nodiscard]] bool _pw_as_ulonglong(PwValuePtr value, unsigned long long* result, bool allow_overflow);
76[[nodiscard]] bool _pw_as_int8     (PwValuePtr value, int8_t*         result, bool allow_overflow);
77[[nodiscard]] bool _pw_as_uint8    (PwValuePtr value, uint8_t*        result, bool allow_overflow);
78[[nodiscard]] bool _pw_as_int16    (PwValuePtr value, int16_t*        result, bool allow_overflow);
79[[nodiscard]] bool _pw_as_uint16   (PwValuePtr value, uint16_t*       result, bool allow_overflow);
80[[nodiscard]] bool _pw_as_int32    (PwValuePtr value, int32_t*        result, bool allow_overflow);
81[[nodiscard]] bool _pw_as_uint32   (PwValuePtr value, uint32_t*       result, bool allow_overflow);
82[[nodiscard]] bool _pw_as_int64    (PwValuePtr value, int64_t*        result, bool allow_overflow);
83[[nodiscard]] bool _pw_as_uint64   (PwValuePtr value, uint64_t*       result, bool allow_overflow);
84[[nodiscard]] bool _pw_as_float    (PwValuePtr value, float*          result, bool allow_overflow);
85[[nodiscard]] bool _pw_as_double   (PwValuePtr value, double*         result, bool allow_overflow);
86[[nodiscard]] bool _pw_as_size_t   (PwValuePtr value, size_t*         result, bool allow_overflow);
87[[nodiscard]] bool _pw_as_ssize_t  (PwValuePtr value, ssize_t*        result, bool allow_overflow);
88[[nodiscard]] bool _pw_as_ptrdiff_t(PwValuePtr value, ptrdiff_t*      result, bool allow_overflow);
89[[nodiscard]] bool _pw_as_uintptr_t(PwValuePtr value, uintptr_t*      result, bool allow_overflow);
90
91#ifdef __cplusplus
92}
93#endif