From 4f27990acf19285948333da6b3d663abdf2117c9 Mon Sep 17 00:00:00 2001
From: Ben Pfaff <blp@cs.stanford.edu>
Date: Sun, 6 Nov 2011 13:03:24 -0800
Subject: [PATCH] abt: New function abt_is_empty().

---
 src/libpspp/abt.h        | 11 +++++++++++
 tests/libpspp/abt-test.c |  1 +
 2 files changed, 12 insertions(+)

diff --git a/src/libpspp/abt.h b/src/libpspp/abt.h
index 0e5b25281e..f97d957e52 100644
--- a/src/libpspp/abt.h
+++ b/src/libpspp/abt.h
@@ -145,6 +145,7 @@
    code and links to other resources, such as the original AA
    tree paper.  */
 
+#include <stdbool.h>
 #include <stddef.h>
 #include "libpspp/cast.h"
 
@@ -186,6 +187,8 @@ struct abt
 void abt_init (struct abt *, abt_compare_func *, abt_reaugment_func *,
                const void *aux);
 
+static inline bool abt_is_empty (const struct abt *);
+
 struct abt_node *abt_insert (struct abt *, struct abt_node *);
 void abt_insert_after (struct abt *,
                        const struct abt_node *, struct abt_node *);
@@ -203,4 +206,12 @@ void abt_reaugmented (const struct abt *, struct abt_node *);
 struct abt_node *abt_changed (struct abt *, struct abt_node *);
 void abt_moved (struct abt *, struct abt_node *);
 
+/* Returns true if ABT contains no nodes, false if ABT contains at least one
+   node. */
+static inline bool
+abt_is_empty (const struct abt *abt)
+{
+  return abt->root == NULL;
+}
+
 #endif /* libpspp/abt.h */
diff --git a/tests/libpspp/abt-test.c b/tests/libpspp/abt-test.c
index eae7d46787..3e68637a5b 100644
--- a/tests/libpspp/abt-test.c
+++ b/tests/libpspp/abt-test.c
@@ -371,6 +371,7 @@ check_abt (struct abt *abt, const int data[], size_t cnt)
         check (abt_node_to_element (p)->data == order[cnt - i - 1]);
       check (p == NULL);
     }
+  check (abt_is_empty (abt) == (cnt == 0));
 
   free (order);
 }
-- 
2.30.2