docs
[pspp] / src / libpspp / hmapx.c
index d73245084178025d2f550c47af66487590310b7a..aab7629d74c1df188fc9f4fd2db0c265762a4ffd 100644 (file)
@@ -1,5 +1,5 @@
 /* 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
@@ -18,9 +18,9 @@
 #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;
@@ -70,7 +84,7 @@ make_hmapx_node (void *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);
@@ -91,7 +105,7 @@ hmapx_insert (struct hmapx *map, void *data, size_t 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);