/usr/include/collectd/utils_avltree.h is in collectd-dev 4.10.1-2.1ubuntu7.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 | /**
* collectd - src/utils_avltree.h
* Copyright (C) 2006,2007 Florian octo Forster
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program 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
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
* Authors:
* Florian octo Forster <octo at verplant.org>
**/
#ifndef UTILS_AVLTREE_H
#define UTILS_AVLTREE_H 1
struct c_avl_tree_s;
typedef struct c_avl_tree_s c_avl_tree_t;
struct c_avl_iterator_s;
typedef struct c_avl_iterator_s c_avl_iterator_t;
/*
* NAME
* c_avl_create
*
* DESCRIPTION
* Allocates a new AVL-tree.
*
* PARAMETERS
* `compare' The function-pointer `compare' is used to compare two keys. It
* has to return less than zero if it's first argument is smaller
* then the second argument, more than zero if the first argument
* is bigger than the second argument and zero if they are equal.
* If your keys are char-pointers, you can use the `strcmp'
* function from the libc here.
*
* RETURN VALUE
* A c_avl_tree_t-pointer upon success or NULL upon failure.
*/
c_avl_tree_t *c_avl_create (int (*compare) (const void *, const void *));
/*
* NAME
* c_avl_destroy
*
* DESCRIPTION
* Deallocates an AVL-tree. Stored value- and key-pointer are lost, but of
* course not freed.
*/
void c_avl_destroy (c_avl_tree_t *t);
/*
* NAME
* c_avl_insert
*
* DESCRIPTION
* Stores the key-value-pair in the AVL-tree pointed to by `t'.
*
* PARAMETERS
* `t' AVL-tree to store the data in.
* `key' Key used to store the value under. This is used to get back to
* the value again. The pointer is stored in an internal structure
* and _not_ copied. So the memory pointed to may _not_ be freed
* before this entry is removed. You can use the `rkey' argument
* to `avl_remove' to get the original pointer back and free it.
* `value' Value to be stored.
*
* RETURN VALUE
* Zero upon success, non-zero otherwise. It's less than zero if an error
* occurred or greater than zero if the key is already stored in the tree.
*/
int c_avl_insert (c_avl_tree_t *t, void *key, void *value);
/*
* NAME
* c_avl_remove
*
* DESCRIPTION
* Removes a key-value-pair from the tree t. The stored key and value may be
* returned in `rkey' and `rvalue'.
*
* PARAMETERS
* `t' AVL-tree to remove key-value-pair from.
* `key' Key to identify the entry.
* `rkey' Pointer to a pointer in which to store the key. May be NULL.
* Since the `key' pointer is not copied when creating an entry,
* the pointer may not be available anymore from outside the tree.
* You can use this argument to get the actual pointer back and
* free the memory pointed to by it.
* `rvalue' Pointer to a pointer in which to store the value. May be NULL.
*
* RETURN VALUE
* Zero upon success or non-zero if the key isn't found in the tree.
*/
int c_avl_remove (c_avl_tree_t *t, const void *key, void **rkey, void **rvalue);
/*
* NAME
* c_avl_get
*
* DESCRIPTION
* Retrieve the `value' belonging to `key'.
*
* PARAMETERS
* `t' AVL-tree to get the value from.
* `key' Key to identify the entry.
* `value' Pointer to a pointer in which to store the value. May be NULL.
*
* RETURN VALUE
* Zero upon success or non-zero if the key isn't found in the tree.
*/
int c_avl_get (c_avl_tree_t *t, const void *key, void **value);
/*
* NAME
* c_avl_pick
*
* DESCRIPTION
* Remove a (pseudo-)random element from the tree and return it's `key' and
* `value'. Entries are not returned in any particular order. This function
* is intended for cache-flushes that don't care about the order but simply
* want to remove all elements, one at a time.
*
* PARAMETERS
* `t' AVL-tree to get the value from.
* `key' Pointer to a pointer in which to store the key.
* `value' Pointer to a pointer in which to store the value.
*
* RETURN VALUE
* Zero upon success or non-zero if the tree is empty or key or value is
* NULL.
*/
int c_avl_pick (c_avl_tree_t *t, void **key, void **value);
c_avl_iterator_t *c_avl_get_iterator (c_avl_tree_t *t);
int c_avl_iterator_next (c_avl_iterator_t *iter, void **key, void **value);
int c_avl_iterator_prev (c_avl_iterator_t *iter, void **key, void **value);
void c_avl_iterator_destroy (c_avl_iterator_t *iter);
#endif /* UTILS_AVLTREE_H */
|