libcbor 0.12.0
libcbor is a C library for parsing and generating CBOR, the general-purpose schema-less binary data format.
Loading...
Searching...
No Matches
ints.c
Go to the documentation of this file.
1/*
2 * Copyright (c) 2014-2020 Pavel Kalvoda <me@pavelkalvoda.com>
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#include "ints.h"
9
14
15uint8_t cbor_get_uint8(const cbor_item_t* item) {
18 return *item->data;
19}
20
21uint16_t cbor_get_uint16(const cbor_item_t* item) {
24 return *(uint16_t*)item->data;
25}
26
27uint32_t cbor_get_uint32(const cbor_item_t* item) {
30 return *(uint32_t*)item->data;
31}
32
33uint64_t cbor_get_uint64(const cbor_item_t* item) {
36 return *(uint64_t*)item->data;
37}
38
39uint64_t cbor_get_int(const cbor_item_t* item) {
41 // cppcheck-suppress missingReturn
42 switch (cbor_int_get_width(item)) {
43 case CBOR_INT_8:
44 return cbor_get_uint8(item);
45 case CBOR_INT_16:
46 return cbor_get_uint16(item);
47 case CBOR_INT_32:
48 return cbor_get_uint32(item);
49 case CBOR_INT_64:
50 return cbor_get_uint64(item);
51 default:
53 return 0;
54 }
55}
56
57void cbor_set_uint8(cbor_item_t* item, uint8_t value) {
60 *item->data = value;
61}
62
63void cbor_set_uint16(cbor_item_t* item, uint16_t value) {
66 *(uint16_t*)item->data = value;
67}
68
69void cbor_set_uint32(cbor_item_t* item, uint32_t value) {
72 *(uint32_t*)item->data = value;
73}
74
75void cbor_set_uint64(cbor_item_t* item, uint64_t value) {
78 *(uint64_t*)item->data = value;
79}
80
83 item->type = CBOR_TYPE_UINT;
84}
85
90
92 cbor_item_t* item = _cbor_malloc(sizeof(cbor_item_t) + 1);
93 _CBOR_NOTNULL(item);
94 *item = (cbor_item_t){.data = (unsigned char*)item + sizeof(cbor_item_t),
95 .refcount = 1,
96 .metadata = {.int_metadata = {.width = CBOR_INT_8}},
97 .type = CBOR_TYPE_UINT};
98 return item;
99}
100
102 cbor_item_t* item = _cbor_malloc(sizeof(cbor_item_t) + 2);
103 _CBOR_NOTNULL(item);
104 *item = (cbor_item_t){.data = (unsigned char*)item + sizeof(cbor_item_t),
105 .refcount = 1,
106 .metadata = {.int_metadata = {.width = CBOR_INT_16}},
107 .type = CBOR_TYPE_UINT};
108 return item;
109}
110
112 cbor_item_t* item = _cbor_malloc(sizeof(cbor_item_t) + 4);
113 _CBOR_NOTNULL(item);
114 *item = (cbor_item_t){.data = (unsigned char*)item + sizeof(cbor_item_t),
115 .refcount = 1,
116 .metadata = {.int_metadata = {.width = CBOR_INT_32}},
117 .type = CBOR_TYPE_UINT};
118 return item;
119}
120
122 cbor_item_t* item = _cbor_malloc(sizeof(cbor_item_t) + 8);
123 _CBOR_NOTNULL(item);
124 *item = (cbor_item_t){.data = (unsigned char*)item + sizeof(cbor_item_t),
125 .refcount = 1,
126 .metadata = {.int_metadata = {.width = CBOR_INT_64}},
127 .type = CBOR_TYPE_UINT};
128 return item;
129}
130
132 cbor_item_t* item = cbor_new_int8();
133 _CBOR_NOTNULL(item);
134 cbor_set_uint8(item, value);
135 cbor_mark_uint(item);
136 return item;
137}
138
140 cbor_item_t* item = cbor_new_int16();
141 _CBOR_NOTNULL(item);
142 cbor_set_uint16(item, value);
143 cbor_mark_uint(item);
144 return item;
145}
146
148 cbor_item_t* item = cbor_new_int32();
149 _CBOR_NOTNULL(item);
150 cbor_set_uint32(item, value);
151 cbor_mark_uint(item);
152 return item;
153}
154
156 cbor_item_t* item = cbor_new_int64();
157 _CBOR_NOTNULL(item);
158 cbor_set_uint64(item, value);
159 cbor_mark_uint(item);
160 return item;
161}
162
164 cbor_item_t* item = cbor_new_int8();
165 _CBOR_NOTNULL(item);
166 cbor_set_uint8(item, value);
167 cbor_mark_negint(item);
168 return item;
169}
170
172 cbor_item_t* item = cbor_new_int16();
173 _CBOR_NOTNULL(item);
174 cbor_set_uint16(item, value);
175 cbor_mark_negint(item);
176 return item;
177}
178
180 cbor_item_t* item = cbor_new_int32();
181 _CBOR_NOTNULL(item);
182 cbor_set_uint32(item, value);
183 cbor_mark_negint(item);
184 return item;
185}
186
188 cbor_item_t* item = cbor_new_int64();
189 _CBOR_NOTNULL(item);
190 cbor_set_uint64(item, value);
191 cbor_mark_negint(item);
192 return item;
193}
_cbor_malloc_t _cbor_malloc
Definition allocators.c:10
bool cbor_is_int(const cbor_item_t *item)
Is the item an integer, either positive or negative?
Definition common.c:56
#define _CBOR_UNREACHABLE
Definition common.h:99
#define _CBOR_NOTNULL(cbor_item)
Definition common.h:111
#define CBOR_ASSERT(e)
Definition common.h:73
@ CBOR_TYPE_UINT
0 - positive integers
Definition data.h:25
@ CBOR_TYPE_NEGINT
1 - negative integers
Definition data.h:27
cbor_int_width
Possible widths of CBOR_TYPE_UINT items.
Definition data.h:58
@ CBOR_INT_16
Definition data.h:60
@ CBOR_INT_8
Definition data.h:59
@ CBOR_INT_64
Definition data.h:62
@ CBOR_INT_32
Definition data.h:61
uint32_t cbor_get_uint32(const cbor_item_t *item)
Extracts the integer value.
Definition ints.c:27
uint16_t cbor_get_uint16(const cbor_item_t *item)
Extracts the integer value.
Definition ints.c:21
void cbor_set_uint16(cbor_item_t *item, uint16_t value)
Assigns the integer value.
Definition ints.c:63
cbor_item_t * cbor_new_int32(void)
Allocates new integer with 4B width.
Definition ints.c:111
uint8_t cbor_get_uint8(const cbor_item_t *item)
Extracts the integer value.
Definition ints.c:15
cbor_item_t * cbor_build_uint16(uint16_t value)
Constructs a new positive integer.
Definition ints.c:139
void cbor_set_uint32(cbor_item_t *item, uint32_t value)
Assigns the integer value.
Definition ints.c:69
cbor_int_width cbor_int_get_width(const cbor_item_t *item)
Queries the integer width.
Definition ints.c:10
cbor_item_t * cbor_new_int8(void)
Allocates new integer with 1B width.
Definition ints.c:91
cbor_item_t * cbor_build_negint16(uint16_t value)
Constructs a new negative integer.
Definition ints.c:171
cbor_item_t * cbor_build_negint64(uint64_t value)
Constructs a new negative integer.
Definition ints.c:187
void cbor_set_uint8(cbor_item_t *item, uint8_t value)
Assigns the integer value.
Definition ints.c:57
void cbor_mark_negint(cbor_item_t *item)
Marks the integer item as a negative integer.
Definition ints.c:86
uint64_t cbor_get_uint64(const cbor_item_t *item)
Extracts the integer value.
Definition ints.c:33
cbor_item_t * cbor_build_negint8(uint8_t value)
Constructs a new negative integer.
Definition ints.c:163
uint64_t cbor_get_int(const cbor_item_t *item)
Extracts the integer value.
Definition ints.c:39
cbor_item_t * cbor_new_int64(void)
Allocates new integer with 8B width.
Definition ints.c:121
cbor_item_t * cbor_build_uint32(uint32_t value)
Constructs a new positive integer.
Definition ints.c:147
cbor_item_t * cbor_build_uint8(uint8_t value)
Constructs a new positive integer.
Definition ints.c:131
cbor_item_t * cbor_build_negint32(uint32_t value)
Constructs a new negative integer.
Definition ints.c:179
cbor_item_t * cbor_new_int16(void)
Allocates new integer with 2B width.
Definition ints.c:101
void cbor_mark_uint(cbor_item_t *item)
Marks the integer item as a positive integer.
Definition ints.c:81
void cbor_set_uint64(cbor_item_t *item, uint64_t value)
Assigns the integer value.
Definition ints.c:75
cbor_item_t * cbor_build_uint64(uint64_t value)
Constructs a new positive integer.
Definition ints.c:155
cbor_int_width width
Definition data.h:98
The item handle.
Definition data.h:171
unsigned char * data
Raw data block - interpretation depends on metadata.
Definition data.h:179
cbor_type type
Major type discriminator.
Definition data.h:177
size_t refcount
Reference count - initialize to 0.
Definition data.h:175
union cbor_item_metadata metadata
Discriminated by type.
Definition data.h:173
struct _cbor_int_metadata int_metadata
Definition data.h:161