Inline red black tree lookup.
authorcedric <cedric>
Thu, 28 Aug 2008 14:37:26 +0000 (14:37 +0000)
committercedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 28 Aug 2008 14:37:26 +0000 (14:37 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/PROTO/eina@35716 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/include/Makefile.am
src/include/eina_inline_rbtree.x [new file with mode: 0644]
src/include/eina_rbtree.h
src/lib/eina_rbtree.c

index f2ac6f3..a2d1466 100644 (file)
@@ -22,6 +22,7 @@ eina_inline_list.x \
 eina_accessor.h \
 eina_convert.h \
 eina_rbtree.h \
+eina_inline_rbtree.x \
 eina_iterator.h
 
 installed_mainheaderdir = $(prefix)/include/eina-@VMAJ@
diff --git a/src/include/eina_inline_rbtree.x b/src/include/eina_inline_rbtree.x
new file mode 100644 (file)
index 0000000..f13845c
--- /dev/null
@@ -0,0 +1,38 @@
+/* EINA - EFL data type library
+ * Copyright (C) 2002-2008 Carsten Haitzler, Vincent Torri, Jorge Luis Zapata Muga
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library;
+ * if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef EINA_RBTREE_INLINE_H_
+#define EINA_RBTREE_INLINE_H_
+
+static inline Eina_Rbtree *
+eina_rbtree_inline_lookup(Eina_Rbtree *root, const void *key, int length, Eina_Rbtree_Cmp_Key_Cb cmp)
+{
+   int result;
+
+   while (root)
+     {
+       result = cmp(root, key, length);
+       if (result == 0) return root;
+
+       root = root->son[result < 0 ? 0 : 1];
+     }
+
+   return NULL;
+}
+
+#endif
index 117b79f..16aca2a 100644 (file)
@@ -49,10 +49,13 @@ typedef int (*Eina_Rbtree_Cmp_Key_Cb)(const Eina_Rbtree *node, const void *key,
 
 EAPI Eina_Rbtree *eina_rbtree_inline_insert(Eina_Rbtree *root, Eina_Rbtree *node, Eina_Rbtree_Cmp_Node_Cb cmp);
 EAPI Eina_Rbtree *eina_rbtree_inline_remove(Eina_Rbtree *root, Eina_Rbtree *node, Eina_Rbtree_Cmp_Node_Cb cmp);
-EAPI Eina_Rbtree *eina_rbtree_inline_lookup(Eina_Rbtree *root, const void *key, int length, Eina_Rbtree_Cmp_Key_Cb cmp);
+
+static inline Eina_Rbtree *eina_rbtree_inline_lookup(Eina_Rbtree *root, const void *key, int length, Eina_Rbtree_Cmp_Key_Cb cmp);
 
 EAPI Eina_Iterator *eina_rbtree_iterator_prefix(const Eina_Rbtree *root);
 EAPI Eina_Iterator *eina_rbtree_iterator_infix(const Eina_Rbtree *root);
 EAPI Eina_Iterator *eina_rbtree_iterator_postfix(const Eina_Rbtree *root);
 
+#include "eina_inline_rbtree.x"
+
 #endif
index 7a6fac1..6e7f8c2 100644 (file)
@@ -429,22 +429,6 @@ eina_rbtree_inline_remove(Eina_Rbtree *root, Eina_Rbtree *node, Eina_Rbtree_Cmp_
    return root;
 }
 
-EAPI Eina_Rbtree *
-eina_rbtree_inline_lookup(Eina_Rbtree *root, const void *key, int length, Eina_Rbtree_Cmp_Key_Cb cmp)
-{
-   int result;
-
-   while (root)
-     {
-       result = cmp(root, key, length);
-       if (result == 0) return root;
-
-       root = root->son[result < 0 ? 0 : 1];
-     }
-
-   return NULL;
-}
-
 EAPI Eina_Iterator *
 eina_rbtree_iterator_prefix(const Eina_Rbtree *root)
 {