Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/libcbor/src/cbor/internal/stack.h
39566 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_STACK_H
9
#define LIBCBOR_STACK_H
10
11
#include "cbor/common.h"
12
13
#ifdef __cplusplus
14
extern "C" {
15
#endif
16
17
/** Simple stack record for the parser */
18
struct _cbor_stack_record {
19
/** Pointer to the parent stack frame */
20
struct _cbor_stack_record *lower;
21
/** Item under construction */
22
cbor_item_t *item;
23
/**
24
* How many outstanding subitems are expected.
25
*
26
* For example, when we see a new definite array, `subitems` is initialized to
27
* the array length. With every item added, the counter is decreased. When it
28
* reaches zero, the stack is popped and the complete item is propagated
29
* upwards.
30
*/
31
size_t subitems;
32
};
33
34
/** Stack handle - contents and size */
35
struct _cbor_stack {
36
struct _cbor_stack_record *top;
37
size_t size;
38
};
39
40
_CBOR_NODISCARD
41
struct _cbor_stack _cbor_stack_init(void);
42
43
void _cbor_stack_pop(struct _cbor_stack *);
44
45
_CBOR_NODISCARD
46
struct _cbor_stack_record *_cbor_stack_push(struct _cbor_stack *, cbor_item_t *,
47
size_t);
48
49
#ifdef __cplusplus
50
}
51
#endif
52
53
#endif // LIBCBOR_STACK_H
54
55