From: cedric Date: Thu, 28 Aug 2008 14:37:26 +0000 (+0000) Subject: Inline red black tree lookup. X-Git-Tag: submit/2.0alpha-wayland/20121127.222009~1950 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e25ffa438364609b191bf6502d7482c60a889b68;p=profile%2Fivi%2Feina.git Inline red black tree lookup. git-svn-id: http://svn.enlightenment.org/svn/e/trunk/PROTO/eina@35716 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- diff --git a/src/include/Makefile.am b/src/include/Makefile.am index f2ac6f3..a2d1466 100644 --- a/src/include/Makefile.am +++ b/src/include/Makefile.am @@ -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 index 0000000..f13845c --- /dev/null +++ b/src/include/eina_inline_rbtree.x @@ -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 . + */ + +#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 diff --git a/src/include/eina_rbtree.h b/src/include/eina_rbtree.h index 117b79f..16aca2a 100644 --- a/src/include/eina_rbtree.h +++ b/src/include/eina_rbtree.h @@ -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 diff --git a/src/lib/eina_rbtree.c b/src/lib/eina_rbtree.c index 7a6fac1..6e7f8c2 100644 --- a/src/lib/eina_rbtree.c +++ b/src/lib/eina_rbtree.c @@ -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) {