1*4ab93bc7Schristos /*
2*4ab93bc7Schristos  * Copyright (c) 2014-2019 Pavel Kalvoda <me@pavelkalvoda.com>
3*4ab93bc7Schristos  *
4*4ab93bc7Schristos  * libcbor is free software; you can redistribute it and/or modify
5*4ab93bc7Schristos  * it under the terms of the MIT license. See LICENSE for details.
6*4ab93bc7Schristos  */
7*4ab93bc7Schristos 
8*4ab93bc7Schristos #include "stack.h"
9*4ab93bc7Schristos 
_cbor_stack_init()10*4ab93bc7Schristos struct _cbor_stack _cbor_stack_init() {
11*4ab93bc7Schristos   return (struct _cbor_stack){.top = NULL, .size = 0};
12*4ab93bc7Schristos }
13*4ab93bc7Schristos 
_cbor_stack_pop(struct _cbor_stack * stack)14*4ab93bc7Schristos void _cbor_stack_pop(struct _cbor_stack *stack) {
15*4ab93bc7Schristos   struct _cbor_stack_record *top = stack->top;
16*4ab93bc7Schristos   stack->top = stack->top->lower;
17*4ab93bc7Schristos   _CBOR_FREE(top);
18*4ab93bc7Schristos   stack->size--;
19*4ab93bc7Schristos }
20*4ab93bc7Schristos 
_cbor_stack_push(struct _cbor_stack * stack,cbor_item_t * item,size_t subitems)21*4ab93bc7Schristos struct _cbor_stack_record *_cbor_stack_push(struct _cbor_stack *stack,
22*4ab93bc7Schristos                                             cbor_item_t *item,
23*4ab93bc7Schristos                                             size_t subitems) {
24*4ab93bc7Schristos   struct _cbor_stack_record *new_top =
25*4ab93bc7Schristos       _CBOR_MALLOC(sizeof(struct _cbor_stack_record));
26*4ab93bc7Schristos   if (new_top == NULL) return NULL;
27*4ab93bc7Schristos 
28*4ab93bc7Schristos   *new_top = (struct _cbor_stack_record){stack->top, item, subitems};
29*4ab93bc7Schristos   stack->top = new_top;
30*4ab93bc7Schristos   stack->size++;
31*4ab93bc7Schristos   return new_top;
32*4ab93bc7Schristos }
33