[sheepdog] [PATCH RFC 5/5] unit/mock: use rb_tree for mock method management

MORITA Kazutaka morita.kazutaka at gmail.com
Thu Sep 5 02:29:20 CEST 2013


From: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>

Signed-off-by: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>
---
 tests/unit/mock/mock.c |   16 +++++-----------
 tests/unit/mock/mock.h |   16 ++++++++++++----
 2 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/tests/unit/mock/mock.c b/tests/unit/mock/mock.c
index cd321c2..373c02a 100644
--- a/tests/unit/mock/mock.c
+++ b/tests/unit/mock/mock.c
@@ -15,21 +15,15 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include "list.h"
 #include "mock.h"
 
-LIST_HEAD(mock_methods);
+struct rb_root mock_methods = RB_ROOT;
 
 static struct mock_method *find_method(const char *name)
 {
-	struct mock_method *method;
-	int len;
-	list_for_each_entry(method, &mock_methods, list) {
-		len = strlen(method->name);
-		if (strncmp(method->name, name, len) == 0)
-			return method;
-	}
-	return NULL;
+	struct mock_method key = { .name = name };
+
+	return rb_search(&mock_methods, &key, rb, mock_cmp);
 }
 
 int __method_nr_call(const char *name)
@@ -46,6 +40,6 @@ int __method_nr_call(const char *name)
 void __method_reset_all(void)
 {
 	struct mock_method *method;
-	list_for_each_entry(method, &mock_methods, list)
+	rb_for_each_entry(method, &mock_methods, rb)
 		method->nr_call = 0;
 }
diff --git a/tests/unit/mock/mock.h b/tests/unit/mock/mock.h
index 9425c76..c2d6f5b 100644
--- a/tests/unit/mock/mock.h
+++ b/tests/unit/mock/mock.h
@@ -14,19 +14,27 @@
 #ifndef __MOCK_H__
 #define __MOCK_H__
 
-#include "list.h"
+#include <string.h>
+
+#include "rbtree.h"
 
 struct mock_method {
 	const char *name;
 	int nr_call;
-	struct list_node list;
+	struct rb_node rb;
 };
 
-extern struct list_head mock_methods;
+static inline int mock_cmp(const struct mock_method *m1,
+			   const struct mock_method *m2)
+{
+	return strcmp(m1->name, m2->name);
+}
+
+extern struct rb_root mock_methods;
 #define method_register(m)						\
 	static void __attribute__((constructor)) regist_##m(void)	\
 	{								\
-		list_add(&m.list, &mock_methods);			\
+		rb_insert(&mock_methods, &m, rb, mock_cmp);		\
 	}
 
 #define MOCK_VOID_METHOD(m, ...)			\
-- 
1.7.9.5




More information about the sheepdog mailing list