xref: /freebsd/contrib/libcbor/src/cbor/internal/stack.h (revision 10ff414c14eef433d8157f0c17904d740693933b)
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_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   struct _cbor_stack_record *lower;
20   cbor_item_t *item;
21   size_t subitems;
22 };
23 
24 /** Stack handle - contents and size */
25 struct _cbor_stack {
26   struct _cbor_stack_record *top;
27   size_t size;
28 };
29 
30 struct _cbor_stack _cbor_stack_init();
31 
32 void _cbor_stack_pop(struct _cbor_stack *);
33 
34 struct _cbor_stack_record *_cbor_stack_push(struct _cbor_stack *, cbor_item_t *,
35                                             size_t);
36 
37 #ifdef __cplusplus
38 }
39 #endif
40 
41 #endif  // LIBCBOR_STACK_H
42