/*  libhrel - Holyrel library

    Copyright (C) 2005 Chong Kai Xiong <descender@phreaker.net>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 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
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public
    License along with this library; if not, write to the
    Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA  02111-1307  USA.
*/

#ifndef H_AVL_TREE_INDEX_H
#define H_AVL_TREE_INDEX_H

#include <glib.h>

/* Only included for HIndexFunc */
#include <libhrel/hash_index.h>

G_BEGIN_DECLS

typedef struct _HAvlTreeIndex HAvlTreeIndex;

HAvlTreeIndex *h_avl_tree_index_new_l   (GCompareDataFunc  compare_func,
                                         gpointer          compare_func_data,
                                         GDestroyNotify    key_destroy_func,
                                         GDestroyNotify    value_destroy_func,
                                         GSList           *list);

void           h_avl_tree_index_free    (HAvlTreeIndex    *index);

void           h_avl_tree_index_insert  (HAvlTreeIndex    *index,
                                         HTuple           *tuple,
                                         gpointer          value);

gboolean       h_avl_tree_index_remove  (HAvlTreeIndex    *index,
                                         HTuple           *tuple);

gpointer       h_avl_tree_index_lookup  (HAvlTreeIndex    *index,
                                         HTuple           *tuple);

void           h_avl_tree_index_foreach (HAvlTreeIndex    *index,
                                         HIndexFunc        func,
                                         gpointer          user_data);

G_END_DECLS

#endif /* #ifndef H_AVL_TREE_INDEX_H */

