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