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 #ifndef LIBCBOR_TAGS_H
9 #define LIBCBOR_TAGS_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  * Tag manipulation
21  * ============================================================================
22  */
23 
24 /** Create a new tag
25  *
26  * @param value The tag value. Please consult the tag repository
27  * @return **new** tag. Item reference is `NULL`. Returns `NULL` upon
28  * 	memory allocation failure
29  */
30 CBOR_EXPORT cbor_item_t *cbor_new_tag(uint64_t value);
31 
32 /** Get the tagged item
33  *
34  * @param item[borrow] A tag
35  * @return **incref** the tagged item
36  */
37 CBOR_EXPORT cbor_item_t *cbor_tag_item(const cbor_item_t *item);
38 
39 /** Get tag value
40  *
41  * @param item[borrow] A tag
42  * @return The tag value. Please consult the tag repository
43  */
44 CBOR_EXPORT uint64_t cbor_tag_value(const cbor_item_t *item);
45 
46 /** Set the tagged item
47  *
48  * @param item[borrow] A tag
49  * @param tagged_item[incref] The item to tag
50  */
51 CBOR_EXPORT void cbor_tag_set_item(cbor_item_t *item, cbor_item_t *tagged_item);
52 
53 /** Build a new tag
54  *
55  * @param item[incref] The tagee
56  * @param value Tag value
57  * @return **new** tag item
58  */
59 CBOR_EXPORT cbor_item_t *cbor_build_tag(uint64_t value, cbor_item_t *item);
60 
61 #ifdef __cplusplus
62 }
63 #endif
64 
65 #endif  // LIBCBOR_TAGS_H
66