-
Notifications
You must be signed in to change notification settings - Fork 0
/
zasobnik_zaloha.c
110 lines (95 loc) · 2.36 KB
/
zasobnik_zaloha.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include "parser.h"
#include "bvs.h"
#include "zasobnik.h"
#include "interpret.h"
/*
* Inicializace zasobniku
* @return = chybovy kod
*/
int zasobnik_init (TZasobnik *zas){
if ((zas->array = malloc(REALLOC_SOUSTO*sizeof(TPrvek)))==NULL){ // k malloc musi byt free !!!
return ERR_INTERNI;
}
zas->velikost = REALLOC_SOUSTO;
zas->top = -1;
return ERR_OK;
}
/*
* Vynulovani zasobniku
*/
void zasobnik_vynuluj (TZasobnik *zas){
zas->top = -1;
}
/*
* Uvolni dynamicky alokovanou pamet
* @return = chybovy kod
*/
void zasobnik_free(TZasobnik *zas){
free(zas -> array);
}
/*
* Vyjme hodnotu z vrcholu zasobniku a (!)nevrati
* @return = chybovy kod
*/
int zasobnik_pop (TZasobnik *zas){
if(zas->top>=0){
zas->top--;
}
return ERR_OK;
}
/*
* Vlozi hodnotu na vrcholu zasobniku a posune ho
* @return = chybovy kod
*/
int zasobnik_push (TZasobnik *zas, TPrvek prvek){
if(zas->top == zas->velikost-1) {
if((zas->array = realloc(zas->array, ((zas->velikost + REALLOC_SOUSTO) * sizeof(TPrvek)))) == NULL) { // k malloc musi byt free !!!
zasobnik_free(zas);
return ERR_INTERNI;
}
zas->velikost += REALLOC_SOUSTO;
}
zas->top++;
zas->array[zas->top] = prvek;
return ERR_OK;
}
/*
* Vrati hodnotu na vrcholu zasobniku (+ s posunem)
* == zobecneni ZasobnikTop
* @return = chybovy kod
* *hodn = vraci hodnotu na vrcholu zasobniku
*/
int zasobnik_pristup_int (TZasobnik *zas, int * hodn, int posun){
if (zas->top <= 0-posun){
return ERR_INTERNI;
}
*hodn = zas->array[zas->top-posun].typ;
printf("zasobnik-pristup: %d", (int)hodn);
return ERR_OK;
}
/*
* Vrati hodnotu na vrcholu zasobniku (+ s posunem)
* == zobecneni ZasobnikTop
* @return = chybovy kod
* *hodn = vraci hodnotu na vrcholu zasobniku
*/
int zasobnik_pristup_uk (TZasobnik *zas, UkTBSPolozka * hodn, int posun){
if (zas->top <= 0-posun){
return ERR_INTERNI;
}
*hodn = zas->array[zas->top-posun].uk_na_prvek_ts;
printf("zasobnik-pristup: %d", (int)hodn);
return ERR_OK;
}
/*
* Vrati hodnotu na vrcholu zasobniku za pouziti fce zasobnik_pristup
* @return = chybovy kod
* *hodn = vraci hodnotu na vrcholu zasobniku
*/
/*
int zasobnik_top (TZasobnik *zas, TPrvek * hodn){
return zasobnik_pristup(zas, hodn,0);
}*/