Inline red black tree lookup.

SVN revision: 35716
This commit is contained in:
Cedric BAIL 2008-08-28 14:37:26 +00:00
parent 3a10b7f782
commit 9494785cb7
4 changed files with 43 additions and 17 deletions

View 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@

View File

@ -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

View 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

View 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)
{