Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/libcbor/src/cbor/floats_ctrls.h
39536 views
1
/*
2
* Copyright (c) 2014-2020 Pavel Kalvoda <[email protected]>
3
*
4
* libcbor is free software; you can redistribute it and/or modify
5
* it under the terms of the MIT license. See LICENSE for details.
6
*/
7
8
#ifndef LIBCBOR_FLOATS_CTRLS_H
9
#define LIBCBOR_FLOATS_CTRLS_H
10
11
#include "cbor/cbor_export.h"
12
#include "cbor/common.h"
13
14
#ifdef __cplusplus
15
extern "C" {
16
#endif
17
18
/*
19
* ============================================================================
20
* Float manipulation
21
* ============================================================================
22
*/
23
24
/** Is this a ctrl value?
25
*
26
* @param item A float or ctrl item
27
* @return Is this a ctrl value?
28
*/
29
_CBOR_NODISCARD CBOR_EXPORT bool cbor_float_ctrl_is_ctrl(
30
const cbor_item_t *item);
31
32
/** Get the float width
33
*
34
* @param item A float or ctrl item
35
* @return The width.
36
*/
37
_CBOR_NODISCARD CBOR_EXPORT cbor_float_width
38
cbor_float_get_width(const cbor_item_t *item);
39
40
/** Get a half precision float
41
*
42
* The item must have the corresponding width
43
*
44
* @param item A half precision float
45
* @return half precision value
46
*/
47
_CBOR_NODISCARD CBOR_EXPORT float cbor_float_get_float2(
48
const cbor_item_t *item);
49
50
/** Get a single precision float
51
*
52
* The item must have the corresponding width
53
*
54
* @param item A single precision float
55
* @return single precision value
56
*/
57
_CBOR_NODISCARD CBOR_EXPORT float cbor_float_get_float4(
58
const cbor_item_t *item);
59
60
/** Get a double precision float
61
*
62
* The item must have the corresponding width
63
*
64
* @param item A double precision float
65
* @return double precision value
66
*/
67
_CBOR_NODISCARD CBOR_EXPORT double cbor_float_get_float8(
68
const cbor_item_t *item);
69
70
/** Get the float value represented as double
71
*
72
* Can be used regardless of the width.
73
*
74
* @param item Any float
75
* @return double precision value
76
*/
77
_CBOR_NODISCARD CBOR_EXPORT double cbor_float_get_float(
78
const cbor_item_t *item);
79
80
/** Get value from a boolean ctrl item
81
*
82
* @param item A ctrl item
83
* @return boolean value
84
*/
85
_CBOR_NODISCARD CBOR_EXPORT bool cbor_get_bool(const cbor_item_t *item);
86
87
/** Constructs a new ctrl item
88
*
89
* The width cannot be changed once the item is created
90
*
91
* @return Reference to the new ctrl item. The item's reference count is
92
* initialized to one.
93
* @return `NULL` if memory allocation fails
94
*/
95
_CBOR_NODISCARD CBOR_EXPORT cbor_item_t *cbor_new_ctrl(void);
96
97
/** Constructs a new float item
98
*
99
* The width cannot be changed once the item is created
100
*
101
* @return Reference to the new float item. The item's reference count is
102
* initialized to one.
103
* @return `NULL` if memory allocation fails
104
*/
105
_CBOR_NODISCARD CBOR_EXPORT cbor_item_t *cbor_new_float2(void);
106
107
/** Constructs a new float item
108
*
109
* The width cannot be changed once the item is created
110
*
111
* @return Reference to the new float item. The item's reference count is
112
* initialized to one.
113
* @return `NULL` if memory allocation fails
114
*/
115
_CBOR_NODISCARD CBOR_EXPORT cbor_item_t *cbor_new_float4(void);
116
117
/** Constructs a new float item
118
*
119
* The width cannot be changed once the item is created
120
*
121
* @return Reference to the new float item. The item's reference count is
122
* initialized to one.
123
* @return `NULL` if memory allocation fails
124
*/
125
_CBOR_NODISCARD CBOR_EXPORT cbor_item_t *cbor_new_float8(void);
126
127
/** Constructs new null ctrl item
128
*
129
* @return Reference to the new null item. The item's reference count is
130
* initialized to one.
131
* @return `NULL` if memory allocation fails
132
*/
133
_CBOR_NODISCARD CBOR_EXPORT cbor_item_t *cbor_new_null(void);
134
135
/** Constructs new undef ctrl item
136
*
137
* @return Reference to the new undef item. The item's reference count is
138
* initialized to one.
139
* @return `NULL` if memory allocation fails
140
*/
141
_CBOR_NODISCARD CBOR_EXPORT cbor_item_t *cbor_new_undef(void);
142
143
/** Constructs new boolean ctrl item
144
*
145
* @param value The value to use
146
* @return Reference to the new boolean item. The item's reference count is
147
* initialized to one.
148
* @return `NULL` if memory allocation fails
149
*/
150
_CBOR_NODISCARD CBOR_EXPORT cbor_item_t *cbor_build_bool(bool value);
151
152
/** Assign a control value
153
*
154
* \rst
155
* .. warning:: It is possible to produce an invalid CBOR value by assigning a
156
* invalid value using this mechanism. Please consult the standard before use.
157
* \endrst
158
*
159
* @param item A ctrl item
160
* @param value The simple value to assign. Please consult the standard for
161
* allowed values
162
*/
163
CBOR_EXPORT void cbor_set_ctrl(cbor_item_t *item, uint8_t value);
164
165
/** Assign a boolean value to a boolean ctrl item
166
*
167
* @param item A ctrl item
168
* @param value The simple value to assign.
169
*/
170
CBOR_EXPORT void cbor_set_bool(cbor_item_t *item, bool value);
171
172
/** Assigns a float value
173
*
174
* @param item A half precision float
175
* @param value The value to assign
176
*/
177
CBOR_EXPORT void cbor_set_float2(cbor_item_t *item, float value);
178
179
/** Assigns a float value
180
*
181
* @param item A single precision float
182
* @param value The value to assign
183
*/
184
CBOR_EXPORT void cbor_set_float4(cbor_item_t *item, float value);
185
186
/** Assigns a float value
187
*
188
* @param item A double precision float
189
* @param value The value to assign
190
*/
191
CBOR_EXPORT void cbor_set_float8(cbor_item_t *item, double value);
192
193
/** Reads the control value
194
*
195
* @param item A ctrl item
196
* @return the simple value
197
*/
198
_CBOR_NODISCARD CBOR_EXPORT uint8_t cbor_ctrl_value(const cbor_item_t *item);
199
200
/** Constructs a new float
201
*
202
* @param value the value to use
203
* @return Reference to the new float item. The item's reference count is
204
* initialized to one.
205
* @return `NULL` if memory allocation fails
206
*/
207
_CBOR_NODISCARD CBOR_EXPORT cbor_item_t *cbor_build_float2(float value);
208
209
/** Constructs a new float
210
*
211
* @param value the value to use
212
* @return Reference to the new float item. The item's reference count is
213
* initialized to one.
214
* @return `NULL` if memory allocation fails
215
*/
216
_CBOR_NODISCARD CBOR_EXPORT cbor_item_t *cbor_build_float4(float value);
217
218
/** Constructs a new float
219
*
220
* @param value the value to use
221
* @return Reference to the new float item. The item's reference count is
222
* initialized to one.
223
* @return `NULL` if memory allocation fails
224
*/
225
_CBOR_NODISCARD CBOR_EXPORT cbor_item_t *cbor_build_float8(double value);
226
227
/** Constructs a ctrl item
228
*
229
* @param value the value to use
230
* @return Reference to the new ctrl item. The item's reference count is
231
* initialized to one.
232
* @return `NULL` if memory allocation fails
233
*/
234
_CBOR_NODISCARD CBOR_EXPORT cbor_item_t *cbor_build_ctrl(uint8_t value);
235
236
#ifdef __cplusplus
237
}
238
#endif
239
240
#endif // LIBCBOR_FLOATS_CTRLS_H
241
242