Commit | Line | Data |
---|---|---|
a24bd519 | 1 | #include <malloc.h> |
893638e2 | 2 | #include <math.h> |
a24bd519 LM |
3 | #include <stdio.h> |
4 | ||
5 | #include "alloc.h" | |
6 | #include "debug.h" | |
7 | #include "format.h" | |
893638e2 | 8 | #include "tabular.h" |
a24bd519 LM |
9 | |
10 | #include "storage.h" | |
11 | ||
12 | /* global variables */ | |
13 | ||
14 | #define DEFAULT_STORAGE_SIZE 10 | |
893638e2 | 15 | tab_t *storage = NULL; |
a24bd519 LM |
16 | |
17 | /* storage functions */ | |
18 | ||
19 | void memory (int nb) | |
20 | { | |
893638e2 LM |
21 | if (nb != size_tab (storage)) { |
22 | storage = resize_tab (storage, nb); | |
a24bd519 LM |
23 | } |
24 | } | |
25 | ||
893638e2 | 26 | double store (int id, double value) |
a24bd519 | 27 | { |
893638e2 | 28 | if (storage == NULL) { |
a24bd519 LM |
29 | memory (DEFAULT_STORAGE_SIZE); |
30 | } | |
893638e2 | 31 | return set_tab (storage, id, value); |
a24bd519 LM |
32 | } |
33 | ||
893638e2 | 34 | double recall (int id) |
a24bd519 | 35 | { |
893638e2 | 36 | if (storage == NULL) { |
a24bd519 LM |
37 | memory (DEFAULT_STORAGE_SIZE); |
38 | } | |
893638e2 | 39 | return get_tab (storage, id); |
a24bd519 LM |
40 | } |
41 | ||
893638e2 | 42 | double increase (int id) |
a24bd519 | 43 | { |
893638e2 | 44 | if (storage == NULL) { |
a24bd519 LM |
45 | memory (DEFAULT_STORAGE_SIZE); |
46 | } | |
893638e2 LM |
47 | double val = get_tab (storage, id); |
48 | if (!isnan (val)) { | |
49 | set_tab (storage, id, ++val); | |
a24bd519 | 50 | } |
893638e2 | 51 | return val; |
a24bd519 LM |
52 | } |
53 | ||
893638e2 | 54 | double decrease (int id) |
a24bd519 | 55 | { |
893638e2 | 56 | if (storage == NULL) { |
a24bd519 LM |
57 | memory (DEFAULT_STORAGE_SIZE); |
58 | } | |
893638e2 LM |
59 | double val = get_tab (storage, id); |
60 | if (!isnan (val)) { | |
61 | set_tab (storage, id, --val); | |
a24bd519 | 62 | } |
893638e2 | 63 | return val; |
a24bd519 LM |
64 | } |
65 | ||
66 | void display (void) | |
67 | { | |
893638e2 | 68 | if (storage == NULL) { |
a24bd519 LM |
69 | memory (DEFAULT_STORAGE_SIZE); |
70 | } | |
893638e2 | 71 | int i, n = size_tab (storage); |
a24bd519 | 72 | fprintf (stdout, "storage:"); |
893638e2 | 73 | for (i = 0; i < n; i++) { |
a24bd519 | 74 | fprintf (stdout, " "); |
893638e2 | 75 | fprintf (stdout, minform, get_tab (storage, i + 1)); |
a24bd519 LM |
76 | } |
77 | fprintf (stdout, "\n"); | |
78 | } | |
79 | ||
80 | void clear () | |
81 | { | |
893638e2 LM |
82 | if (storage == NULL) { |
83 | memory (DEFAULT_STORAGE_SIZE); | |
84 | } | |
85 | int i, n = size_tab (storage); | |
86 | for (i = 0; i < n; i++) { | |
87 | set_tab (storage, i, 0); | |
a24bd519 LM |
88 | } |
89 | } | |
90 | ||
91 | /* vim: set ts=4 sw=4 et: */ |