瀏覽代碼

Added compare function to sllist_find

isundil 9 年之前
父節點
當前提交
c2dbf99c8a
共有 3 個文件被更改,包括 32 次插入12 次删除
  1. 7 0
      lib/sllist/include/sllist.h
  2. 11 0
      lib/sllist/src/find.c
  3. 14 12
      test/sllist/main.c

+ 7 - 0
lib/sllist/include/sllist.h

@@ -70,5 +70,12 @@ int sllist_find(sl_list *list, int(*fnc)(const void *cmp, const void *param), co
 **/
 int sllist_foreach(sl_list *list, int(*fnc)(void **item, void *custom), void *custom);
 
+/**
+ * Comp functions
+ * usable with sllist_find
+**/
+int sllist_cmp_int(const void *a, const void *b);
+int sllist_cmp_string(const void *a, const void *b);
+
 #endif /* SL_LIST_H__ */
 

+ 11 - 0
lib/sllist/src/find.c

@@ -1,6 +1,17 @@
 #include <unistd.h>
+#include <string.h>
 #include "sllist.h"
 
+int sllist_cmp_int(const void *a, const void *b)
+{
+	return a == b;
+}
+
+int sllist_cmp_string(const void *a, const void *b)
+{
+	return strcmp(a, b) == 0;
+}
+
 int sllist_find(sl_list *list, int(*cmpfnc)(const void *, const void*), const void *param)
 {
 	struct sl_list_item *i = list->first;

+ 14 - 12
test/sllist/main.c

@@ -11,11 +11,6 @@ static inline int test_create()
 	return 0;
 }
 
-int cmp_int(const void *a, const void *b)
-{
-	return a == b;
-}
-
 static inline int add1_fnc(void **_i, void *nullable)
 {
 	(void) nullable;
@@ -49,18 +44,25 @@ static inline int test_add()
 	_assertEqual(sllist_at(a, 0), 0);
 	_assertEqual(sllist_at(a, 1023), 2046);
 	_assertEqual(sllist_at(a, 1024), 0);
-	_assertEqual(sllist_find(a, cmp_int, 0), 0);
-	_assertEqual(sllist_find(a, cmp_int, (void *)2), 1);
-	_assertEqual(sllist_find(a, cmp_int, (void *)2046), 1023);
-	_assertEqual(sllist_find(a, cmp_int, (void *)2048), -1);
+	i = 0;
+	_assertEqual(sllist_find(a, sllist_cmp_int, (void*)i), 0);
+	i = 2;
+	_assertEqual(sllist_find(a, sllist_cmp_int, (void*)i), 1);
+	i = 2046;
+	_assertEqual(sllist_find(a, sllist_cmp_int, (void*)i), 1023);
+	i = 2048;
+	_assertEqual(sllist_find(a, sllist_cmp_int, (void*)i), -1);
 	sllist_foreach(a, add1_fnc, NULL);
 	_assertEqual(sllist_count(a), 1024);
 	_assertEqual(sllist_at(a, 0), 1);
 	_assertEqual(sllist_at(a, 1023), 2047);
 	_assertEqual(sllist_at(a, 1024), 0);
-	_assertEqual(sllist_find(a, cmp_int, (void *)1), 0);
-	_assertEqual(sllist_find(a, cmp_int, (void *)3), 1);
-	_assertEqual(sllist_find(a, cmp_int, (void *)2047), 1023);
+	i = 1;
+	_assertEqual(sllist_find(a, sllist_cmp_int, (void*)i), 0);
+	i = 3;
+	_assertEqual(sllist_find(a, sllist_cmp_int, (void*)i), 1);
+	i = 2047;
+	_assertEqual(sllist_find(a, sllist_cmp_int, (void*)i), 1023);
 	while (sllist_count(a))
 		sllist_popback(a);
 	for (i=0; i < 1024; ++i)