2 * Copyright (C) 2012-2013 Thadeu Lima de Souza Cascardo <cascardo@minaslivre.org>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 3 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
33 struct pmhash * pmhash_new(void)
35 struct pmhash *pmhash;
37 pmhash = malloc(sizeof(*pmhash) + len * sizeof(struct item));
41 memset(pmhash->items, 0, len * sizeof(struct item));
45 int pmhash_add(struct pmhash **pmhash, char *key, void *val)
48 struct pmhash *hash = *pmhash;
51 for (; i < hash->len; i++) {
52 if (hash->items[i].key == NULL) {
53 hash->items[i].key = key;
54 hash->items[i].val = val;
60 size_t len = hash->len * sizeof(struct item);
61 size_t nlen = len * 2;
62 nhash = realloc(hash, sizeof(*nhash) + nlen);
65 *pmhash = hash = nhash;
66 memset(&hash->items[hash->len], 0, len);
67 hash->len = hash->len * 2;
75 void * pmhash_get(struct pmhash *pmhash, char *key)
78 for (i = 0; i < pmhash->len; i++) {
79 if (pmhash->items[i].key == NULL)
81 if (!strcmp(pmhash->items[i].key, key))
82 return pmhash->items[i].val;
87 void pmhash_del(struct pmhash *pmhash)
90 for (i = 0; i < pmhash->len; i++) {
91 if (pmhash->items[i].key == NULL)
93 free(pmhash->items[i].key);
94 free(pmhash->items[i].val);