/* PSPP - a program for statistical analysis.
- Copyright (C) 2008 Free Software Foundation, Inc.
+ Copyright (C) 2008, 2009, 2010, 2012 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include <config.h>
#endif
-#include <libpspp/hmapx.h>
+#include "libpspp/hmapx.h"
#include <stdlib.h>
-#include "xalloc.h"
+#include "gl/xalloc.h"
/* Frees the memory, if any, allocated by hash map MAP, including
all hmapx_nodes that it contains. The user-defined data items
items should be freed, then it should be done by iterating
through MAP's contents before destroying MAP. */
void
-hmapx_destroy (struct hmapx *map)
+hmapx_destroy (struct hmapx *map)
{
- if (map != NULL)
+ if (map != NULL)
{
- if (hmapx_count (map) > 0)
+ if (!(hmapx_is_empty (map)))
{
struct hmapx_node *node, *next;
for (node = hmapx_first (map); node != NULL; node = next)
{
next = hmapx_next (map, node);
- free (node);
+ free (node);
}
}
hmap_destroy (&map->hmap);
}
}
+/* Removes all hmapx_nodes from MAP and frees them. The user-defined data
+ items that the hmapx_nodes point to are not affected. */
+void
+hmapx_clear (struct hmapx *map)
+{
+ struct hmapx_node *node, *next;
+
+ for (node = hmapx_first (map); node; node = next)
+ {
+ next = hmapx_next (map, node);
+ hmapx_delete (map, node);
+ }
+}
+
/* Allocates and returns a new hmapx_node with DATA as its data
item. */
static struct hmapx_node *
-make_hmapx_node (void *data)
+make_hmapx_node (void *data)
{
struct hmapx_node *node = xmalloc (sizeof *node);
node->data = data;
then the client must check for duplicates itself before
inserting the new item. */
struct hmapx_node *
-hmapx_insert (struct hmapx *map, void *data, size_t hash)
+hmapx_insert (struct hmapx *map, void *data, size_t hash)
{
struct hmapx_node *node = make_hmapx_node (data);
hmap_insert (&map->hmap, &node->hmap_node, hash);
then the client must check for duplicates itself before
inserting the new node. */
struct hmapx_node *
-hmapx_insert_fast (struct hmapx *map, void *data, size_t hash)
+hmapx_insert_fast (struct hmapx *map, void *data, size_t hash)
{
struct hmapx_node *node = make_hmapx_node (data);
hmap_insert_fast (&map->hmap, &node->hmap_node, hash);