-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtable.c
110 lines (85 loc) · 2.49 KB
/
table.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
109
110
/**********************************************************************
* table.c - table object definition
*
* Copyright 1993, David Nedde
*
* Permission to use, copy, modify, and distribute this software
* and its documentation for any purpose and without fee is granted
* provided that the above copyright notice appears in all copies.
* It is provided "as is" without express or implied warranty.
**********************************************************************/
/* System Headers */
#include <malloc.h>
#include <string.h>
/* Local headers */
#include "misc.h"
#include "table.h"
/* Structures */
typedef struct {
char *key;
void *data;
} table_node_struct_type, *table_node_type;
/* Public object methods */
/* Create a table object */
table_type table__create()
{
table_type table = (table_type)malloc( sizeof(table_struct_type));
table->list = list__create();
return table;
}
/* Free table but not the data contained by the table */
void table__destroy( table)
table_type table;
{
table_node_type table_node;
while ((table_node =
(table_node_type)list__remove_last(table->list)) !=
(table_node_type)0)
{
free( table_node->key);
free( table_node);
}
list__destroy( table->list);
free( table);
}
/* Store data in the table by key */
void table__store( table, key, data)
table_type table;
char * key;
void * data;
{
table_node_type table_node =
(table_node_type)malloc( sizeof(table_node_struct_type));
table_node->key = my_strdup( key);
table_node->data = data;
list__add_end( table->list, (void *)table_node);
}
/* Get a value out of the table, given its key */
void *table__retrieve( table, key)
table_type table;
char * key;
{
table_node_type table_node;
for (table_node = (table_node_type)list__get_first( table->list);
table_node != (table_node_type)0;
table_node = (table_node_type)list__get_next( table->list))
{
if (strcmp( table_node->key, key) == 0)
return table_node->data;
}
return (void *)0;
}
#ifdef DEBUG
void table__dump( table)
table_type table;
{
table_node_type table_node;
for (table_node = (table_node_type)list__get_first( table->list);
table_node != (table_node_type)0;
table_node = (table_node_type)list__get_next( table->list))
{
printf("key = %s\n", table_node->key);
}
printf("------\n");
}
#endif