---
lib/list.c | 16 +++++++++++++++-
lib/list.h | 2 ++
tests/test-list.c | 4 +++-
3 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/lib/list.c b/lib/list.c
index 0f4f2f8..b5fa389 100644
--- a/lib/list.c
+++ b/lib/list.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2009, 2010 Nicira Networks.
+ * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -168,3 +168,17 @@ list_is_empty(const struct list *list)
{
return list->next == list;
}
+
+/* Returns true if 'list' has exactly 1 element, false otherwise. */
+bool
+list_is_singleton(const struct list *list)
+{
+ return list_is_short(list) && !list_is_empty(list);
+}
+
+/* Returns true if 'list' has 0 or 1 elements, false otherwise. */
+bool
+list_is_short(const struct list *list)
+{
+ return list->next == list->prev;
+}
diff --git a/lib/list.h b/lib/list.h
index 915ee85..91c3966 100644
--- a/lib/list.h
+++ b/lib/list.h
@@ -53,6 +53,8 @@ struct list *list_back(const struct list *);
/* List properties. */
size_t list_size(const struct list *);
bool list_is_empty(const struct list *);
+bool list_is_singleton(const struct list *);
+bool list_is_short(const struct list *);
#define LIST_FOR_EACH(ITER, MEMBER, LIST) \
for (ASSIGN_CONTAINER(ITER, (LIST)->next, MEMBER); \
diff --git a/tests/test-list.c b/tests/test-list.c
index 5e62e0c..b4ddd02 100644
--- a/tests/test-list.c
+++ b/tests/test-list.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2009, 2010 Nicira Networks.
+ * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -73,6 +73,8 @@ check_list(struct list *list, const int values[], size_t n)
assert(i == n);
assert(list_is_empty(list) == !n);
+ assert(list_is_singleton(list) == (n == 1));
+ assert(list_is_short(list) == (n < 2));
assert(list_size(list) == n);
}
--
1.7.1
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev