1/* 2 * Copyright (c) 2014-2019 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 "tags.h" 9 10cbor_item_t *cbor_new_tag(uint64_t value) { 11 cbor_item_t *item = _CBOR_MALLOC(sizeof(cbor_item_t)); 12 _CBOR_NOTNULL(item); 13 14 *item = (cbor_item_t){ 15 .refcount = 1, 16 .type = CBOR_TYPE_TAG, 17 .metadata = {.tag_metadata = {.value = value, .tagged_item = NULL}}, 18 .data = NULL /* Never used */ 19 }; 20 return item; 21} 22 23cbor_item_t *cbor_tag_item(const cbor_item_t *item) { 24 assert(cbor_isa_tag(item)); 25 return item->metadata.tag_metadata.tagged_item; 26} 27 28uint64_t cbor_tag_value(const cbor_item_t *item) { 29 assert(cbor_isa_tag(item)); 30 return item->metadata.tag_metadata.value; 31} 32 33void cbor_tag_set_item(cbor_item_t *item, cbor_item_t *tagged_item) { 34 assert(cbor_isa_tag(item)); 35 cbor_incref(tagged_item); 36 item->metadata.tag_metadata.tagged_item = tagged_item; 37} 38 39cbor_item_t *cbor_build_tag(uint64_t value, cbor_item_t *item) { 40 cbor_item_t *res = cbor_new_tag(value); 41 cbor_tag_set_item(res, item); 42 return res; 43} 44