1da0d961cSdjm /* 2d3425be1Sdjm * Copyright (c) 2014-2020 Pavel Kalvoda <me@pavelkalvoda.com> 3da0d961cSdjm * 4da0d961cSdjm * libcbor is free software; you can redistribute it and/or modify 5da0d961cSdjm * it under the terms of the MIT license. See LICENSE for details. 6da0d961cSdjm */ 7da0d961cSdjm 8da0d961cSdjm #ifndef LIBCBOR_FLOATS_CTRLS_H 9da0d961cSdjm #define LIBCBOR_FLOATS_CTRLS_H 10da0d961cSdjm 11*4dcc46c4Sdjm #include "cbor/cbor_export.h" 12da0d961cSdjm #include "cbor/common.h" 13da0d961cSdjm 14da0d961cSdjm #ifdef __cplusplus 15da0d961cSdjm extern "C" { 16da0d961cSdjm #endif 17da0d961cSdjm 18da0d961cSdjm /* 19da0d961cSdjm * ============================================================================ 20da0d961cSdjm * Float manipulation 21da0d961cSdjm * ============================================================================ 22da0d961cSdjm */ 23da0d961cSdjm 24da0d961cSdjm /** Is this a ctrl value? 25da0d961cSdjm * 26da0d961cSdjm * @param item[borrow] A float or ctrl item 27da0d961cSdjm * @return Is this a ctrl value? 28da0d961cSdjm */ 29*4dcc46c4Sdjm _CBOR_NODISCARD CBOR_EXPORT bool cbor_float_ctrl_is_ctrl( 30*4dcc46c4Sdjm const cbor_item_t *item); 31da0d961cSdjm 32da0d961cSdjm /** Get the float width 33da0d961cSdjm * 34da0d961cSdjm * @param item[borrow] A float or ctrl item 35da0d961cSdjm * @return The width. 36da0d961cSdjm */ 37*4dcc46c4Sdjm _CBOR_NODISCARD CBOR_EXPORT cbor_float_width 38*4dcc46c4Sdjm cbor_float_get_width(const cbor_item_t *item); 39da0d961cSdjm 40da0d961cSdjm /** Get a half precision float 41da0d961cSdjm * 42da0d961cSdjm * The item must have the corresponding width 43da0d961cSdjm * 44da0d961cSdjm * @param[borrow] A half precision float 45da0d961cSdjm * @return half precision value 46da0d961cSdjm */ 47*4dcc46c4Sdjm _CBOR_NODISCARD CBOR_EXPORT float cbor_float_get_float2( 48*4dcc46c4Sdjm const cbor_item_t *item); 49da0d961cSdjm 50da0d961cSdjm /** Get a single precision float 51da0d961cSdjm * 52da0d961cSdjm * The item must have the corresponding width 53da0d961cSdjm * 54*4dcc46c4Sdjm * @param[borrow] A single precision float 55da0d961cSdjm * @return single precision value 56da0d961cSdjm */ 57*4dcc46c4Sdjm _CBOR_NODISCARD CBOR_EXPORT float cbor_float_get_float4( 58*4dcc46c4Sdjm const cbor_item_t *item); 59da0d961cSdjm 60da0d961cSdjm /** Get a double precision float 61da0d961cSdjm * 62da0d961cSdjm * The item must have the corresponding width 63da0d961cSdjm * 64da0d961cSdjm * @param[borrow] A double precision float 65da0d961cSdjm * @return double precision value 66da0d961cSdjm */ 67*4dcc46c4Sdjm _CBOR_NODISCARD CBOR_EXPORT double cbor_float_get_float8( 68*4dcc46c4Sdjm const cbor_item_t *item); 69da0d961cSdjm 70da0d961cSdjm /** Get the float value represented as double 71da0d961cSdjm * 72da0d961cSdjm * Can be used regardless of the width. 73da0d961cSdjm * 74da0d961cSdjm * @param[borrow] Any float 75da0d961cSdjm * @return double precision value 76da0d961cSdjm */ 77*4dcc46c4Sdjm _CBOR_NODISCARD CBOR_EXPORT double cbor_float_get_float( 78*4dcc46c4Sdjm const cbor_item_t *item); 79da0d961cSdjm 80d3425be1Sdjm /** Get value from a boolean ctrl item 81d3425be1Sdjm * 82d3425be1Sdjm * @param item[borrow] A ctrl item 83d3425be1Sdjm * @return boolean value 84d3425be1Sdjm */ 85*4dcc46c4Sdjm _CBOR_NODISCARD CBOR_EXPORT bool cbor_get_bool(const cbor_item_t *item); 86d3425be1Sdjm 87da0d961cSdjm /** Constructs a new ctrl item 88da0d961cSdjm * 89da0d961cSdjm * The width cannot be changed once the item is created 90da0d961cSdjm * 919e5c2ddcSdjm * @return **new** 1B ctrl or `NULL` upon memory allocation failure 92da0d961cSdjm */ 93*4dcc46c4Sdjm _CBOR_NODISCARD CBOR_EXPORT cbor_item_t *cbor_new_ctrl(void); 94da0d961cSdjm 95da0d961cSdjm /** Constructs a new float item 96da0d961cSdjm * 97da0d961cSdjm * The width cannot be changed once the item is created 98da0d961cSdjm * 999e5c2ddcSdjm * @return **new** 2B float or `NULL` upon memory allocation failure 100da0d961cSdjm */ 101*4dcc46c4Sdjm _CBOR_NODISCARD CBOR_EXPORT cbor_item_t *cbor_new_float2(void); 102da0d961cSdjm 103da0d961cSdjm /** Constructs a new float item 104da0d961cSdjm * 105da0d961cSdjm * The width cannot be changed once the item is created 106da0d961cSdjm * 1079e5c2ddcSdjm * @return **new** 4B float or `NULL` upon memory allocation failure 108da0d961cSdjm */ 109*4dcc46c4Sdjm _CBOR_NODISCARD CBOR_EXPORT cbor_item_t *cbor_new_float4(void); 110da0d961cSdjm 111da0d961cSdjm /** Constructs a new float item 112da0d961cSdjm * 113da0d961cSdjm * The width cannot be changed once the item is created 114da0d961cSdjm * 1159e5c2ddcSdjm * @return **new** 8B float or `NULL` upon memory allocation failure 116da0d961cSdjm */ 117*4dcc46c4Sdjm _CBOR_NODISCARD CBOR_EXPORT cbor_item_t *cbor_new_float8(void); 118da0d961cSdjm 119da0d961cSdjm /** Constructs new null ctrl item 120da0d961cSdjm * 1219e5c2ddcSdjm * @return **new** null ctrl item or `NULL` upon memory allocation failure 122da0d961cSdjm */ 123*4dcc46c4Sdjm _CBOR_NODISCARD CBOR_EXPORT cbor_item_t *cbor_new_null(void); 124da0d961cSdjm 1259e5c2ddcSdjm /** Constructs new undef ctrl item 126da0d961cSdjm * 1279e5c2ddcSdjm * @return **new** undef ctrl item or `NULL` upon memory allocation failure 128da0d961cSdjm */ 129*4dcc46c4Sdjm _CBOR_NODISCARD CBOR_EXPORT cbor_item_t *cbor_new_undef(void); 130da0d961cSdjm 131da0d961cSdjm /** Constructs new boolean ctrl item 132da0d961cSdjm * 133da0d961cSdjm * @param value The value to use 1342c53affbSjmc * @return **new** boolean ctrl item or `NULL` upon memory allocation failure 135da0d961cSdjm */ 136*4dcc46c4Sdjm _CBOR_NODISCARD CBOR_EXPORT cbor_item_t *cbor_build_bool(bool value); 137da0d961cSdjm 138da0d961cSdjm /** Assign a control value 139da0d961cSdjm * 140da0d961cSdjm * \rst 1419e5c2ddcSdjm * .. warning:: It is possible to produce an invalid CBOR value by assigning a 1429e5c2ddcSdjm * invalid value using this mechanism. Please consult the standard before use. 143da0d961cSdjm * \endrst 144da0d961cSdjm * 145da0d961cSdjm * @param item[borrow] A ctrl item 1469e5c2ddcSdjm * @param value The simple value to assign. Please consult the standard for 1479e5c2ddcSdjm * allowed values 148da0d961cSdjm */ 149*4dcc46c4Sdjm CBOR_EXPORT void cbor_set_ctrl(cbor_item_t *item, uint8_t value); 150da0d961cSdjm 151d3425be1Sdjm /** Assign a boolean value to a boolean ctrl item 152d3425be1Sdjm * 153d3425be1Sdjm * @param item[borrow] A ctrl item 154d3425be1Sdjm * @param value The simple value to assign. 155d3425be1Sdjm */ 156*4dcc46c4Sdjm CBOR_EXPORT void cbor_set_bool(cbor_item_t *item, bool value); 157d3425be1Sdjm 158da0d961cSdjm /** Assigns a float value 159da0d961cSdjm * 160da0d961cSdjm * @param item[borrow] A half precision float 161da0d961cSdjm * @param value The value to assign 162da0d961cSdjm */ 163*4dcc46c4Sdjm CBOR_EXPORT void cbor_set_float2(cbor_item_t *item, float value); 164da0d961cSdjm 165da0d961cSdjm /** Assigns a float value 166da0d961cSdjm * 167da0d961cSdjm * @param item[borrow] A single precision float 168da0d961cSdjm * @param value The value to assign 169da0d961cSdjm */ 170*4dcc46c4Sdjm CBOR_EXPORT void cbor_set_float4(cbor_item_t *item, float value); 171da0d961cSdjm 172da0d961cSdjm /** Assigns a float value 173da0d961cSdjm * 174da0d961cSdjm * @param item[borrow] A double precision float 175da0d961cSdjm * @param value The value to assign 176da0d961cSdjm */ 177*4dcc46c4Sdjm CBOR_EXPORT void cbor_set_float8(cbor_item_t *item, double value); 178da0d961cSdjm 179da0d961cSdjm /** Reads the control value 180da0d961cSdjm * 181da0d961cSdjm * @param item[borrow] A ctrl item 182da0d961cSdjm * @return the simple value 183da0d961cSdjm */ 184*4dcc46c4Sdjm _CBOR_NODISCARD CBOR_EXPORT uint8_t cbor_ctrl_value(const cbor_item_t *item); 185da0d961cSdjm 186da0d961cSdjm /** Constructs a new float 187da0d961cSdjm * 188da0d961cSdjm * @param value the value to use 189da0d961cSdjm * @return **new** float 190da0d961cSdjm */ 191*4dcc46c4Sdjm _CBOR_NODISCARD CBOR_EXPORT cbor_item_t *cbor_build_float2(float value); 192da0d961cSdjm 193da0d961cSdjm /** Constructs a new float 194da0d961cSdjm * 195da0d961cSdjm * @param value the value to use 1969e5c2ddcSdjm * @return **new** float or `NULL` upon memory allocation failure 197da0d961cSdjm */ 198*4dcc46c4Sdjm _CBOR_NODISCARD CBOR_EXPORT cbor_item_t *cbor_build_float4(float value); 199da0d961cSdjm 200da0d961cSdjm /** Constructs a new float 201da0d961cSdjm * 202da0d961cSdjm * @param value the value to use 2039e5c2ddcSdjm * @return **new** float or `NULL` upon memory allocation failure 204da0d961cSdjm */ 205*4dcc46c4Sdjm _CBOR_NODISCARD CBOR_EXPORT cbor_item_t *cbor_build_float8(double value); 206da0d961cSdjm 207da0d961cSdjm /** Constructs a ctrl item 208da0d961cSdjm * 209da0d961cSdjm * @param value the value to use 2109e5c2ddcSdjm * @return **new** ctrl item or `NULL` upon memory allocation failure 211da0d961cSdjm */ 212*4dcc46c4Sdjm _CBOR_NODISCARD CBOR_EXPORT cbor_item_t *cbor_build_ctrl(uint8_t value); 213da0d961cSdjm 214da0d961cSdjm #ifdef __cplusplus 215da0d961cSdjm } 216da0d961cSdjm #endif 217da0d961cSdjm 218da0d961cSdjm #endif // LIBCBOR_FLOATS_CTRLS_H 219