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*4ab93bc7Schristosstruct _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*4ab93bc7Schristosvoid _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*4ab93bc7Schristosstruct _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