Lumiera 0.pre.04~rc.1
»edit your freedom«
Loading...
Searching...
No Matches
psplay.h
Go to the documentation of this file.
1/*
2 psplay.h - probabilistic splay tree
3
4 Copyright (C) (contributed to CinelerraCV)
5 2004-2006, Christian Thaeter <chth@gmx.net>
6 Copyright (C)
7 2007, 2008, Christian Thaeter <ct@pipapo.org>
8
9  **Lumiera** is free software; you can redistribute it and/or modify it
10  under the terms of the GNU General Public License as published by the
11  Free Software Foundation; either version 2 of the License, or (at your
12  option) any later version. See the file COPYING for further details.
13*/
14
15
28#ifndef LIB_PSPLAY_H
29#define LIB_PSPLAY_H
30
31#include <stdint.h>
32#include <stdio.h>
33
34
39typedef struct psplaynode_struct psplaynode;
40typedef psplaynode* PSplaynode;
46
47#define PSPLAYNODE_INITIALIZER {NULL, NULL}
48
55typedef int (*psplay_cmp_fn)(const void* a, const void* b);
56
57
65typedef void (*psplay_delete_fn)(PSplaynode node);
66
67
73typedef const void* (*psplay_key_fn)(const PSplaynode node);
74
75
81typedef struct psplay_struct psplay;
82typedef psplay* PSplay;
83
85{
86 PSplaynode tree; /* the tree */
87 PSplaynode* found_parent; /* maybe direct parent of last found node, used for fast remove */
91
92 size_t elem_cnt;
93 unsigned log2; /* roughly log2 of the elem_cnt*/
94};
95
96
102static inline size_t
104{
105 return self->elem_cnt;
106};
107
108
117PSplay
119
120
127PSplay
129
137PSplay
139
140
146void
147psplay_delete (PSplay self);
148
149
159
160
171psplay_insert (PSplay self, PSplaynode node, int splayfactor);
172
173
183psplay_find (PSplay self, const void* key, int splayfactor);
184
185
195psplay_remove (PSplay self, PSplaynode node);
196
197
205psplay_remove_key (PSplay self, void* key);
206
207
214void
216
217
224void
225psplay_delete_key (PSplay self, void* key);
226
227
234
256typedef psplay_delete_fn (*psplay_action_fn)(PSplaynode node, const enum psplay_order_enum which, int level, void* data);
257
258extern const psplay_delete_fn PSPLAY_CONT;
259extern const psplay_delete_fn PSPLAY_STOP;
261
272int
273psplay_walk (PSplay self, PSplaynode node, psplay_action_fn action, int level, void* data);
274
275
276void
277psplay_dump (PSplay self, FILE* dest);
278
279#endif /*LIB_PSPLAY_H*/
const_LList llist_cmpfn cmp
Definition llist.h:580
void psplay_delete(PSplay self)
Delete a splay tree Frees all elements and associated resources of a splay tree and then itseld.
Definition psplay.c:115
int psplay_walk(PSplay self, PSplaynode node, psplay_action_fn action, int level, void *data)
Start a tree traversal.
Definition psplay.c:442
PSplay psplay_init(PSplay self, psplay_cmp_fn cmp, psplay_key_fn key, psplay_delete_fn del)
Initialize a splay tree.
Definition psplay.c:66
psplay_delete_fn(* psplay_action_fn)(PSplaynode node, const enum psplay_order_enum which, int level, void *data)
Traverse a splay tree Traversing a tree calls a user supplied action three times An 'action' must not...
Definition psplay.h:256
PSplaynode tree
Definition psplay.h:86
size_t elem_cnt
Definition psplay.h:92
PSplaynode left
Definition psplay.h:43
PSplaynode * found_parent
Definition psplay.h:87
psplay_delete_fn del
Definition psplay.h:90
PSplay psplay_destroy(PSplay self)
Destroy a splay tree Frees all elements and associated resources of a splay tree.
Definition psplay.c:101
PSplaynode psplay_insert(PSplay self, PSplaynode node, int splayfactor)
Insert a element into a splay tree.
Definition psplay.c:246
const psplay_delete_fn PSPLAY_CONT
Definition psplay.c:414
static size_t psplay_nelements(PSplay self)
Number of elements in tree.
Definition psplay.h:103
psplaynode * PSplaynode
Definition psplay.h:40
psplay_key_fn key
Definition psplay.h:89
PSplay psplay_new(psplay_cmp_fn cmp, psplay_key_fn key, psplay_delete_fn del)
Allocate a splay tree.
Definition psplay.c:88
PSplaynode psplaynode_init(PSplaynode self)
Initialise a splay tree node The user has to place this nodes within his datastructure and must Initi...
Definition psplay.c:122
const void *(* psplay_key_fn)(const PSplaynode node)
Retrieve the key from a user datastructure.
Definition psplay.h:73
psplay_cmp_fn cmp
Definition psplay.h:88
void psplay_delete_key(PSplay self, void *key)
Delete a node by key from a splay tree.
Definition psplay.c:406
psplay * PSplay
Definition psplay.h:82
psplay_order_enum
Definition psplay.h:229
@ PSPLAY_POSTORDER
Definition psplay.h:232
@ PSPLAY_PREORDER
Definition psplay.h:230
@ PSPLAY_INORDER
Definition psplay.h:231
const psplay_delete_fn PSPLAY_REMOVE
Definition psplay.c:416
PSplaynode right
Definition psplay.h:44
void(* psplay_delete_fn)(PSplaynode node)
Destructor for user defined data Called when an element got removed from a splay tree.
Definition psplay.h:65
const psplay_delete_fn PSPLAY_STOP
Definition psplay.c:415
void psplay_delete_node(PSplay self, PSplaynode node)
Delete a node from a splay tree.
Definition psplay.c:398
PSplaynode psplay_remove(PSplay self, PSplaynode node)
Remove a node from a splay tree.
Definition psplay.c:340
void psplay_dump(PSplay self, FILE *dest)
Definition psplay.c:507
int(* psplay_cmp_fn)(const void *a, const void *b)
Function use to compare keys.
Definition psplay.h:55
PSplaynode psplay_find(PSplay self, const void *key, int splayfactor)
Find a element in a splay tree.
Definition psplay.c:300
unsigned log2
Definition psplay.h:93
PSplaynode psplay_remove_key(PSplay self, void *key)
Remove a node by key from a splay tree.
Definition psplay.c:391
Type and handle for a psplay root structure This structure shall be treated opaque,...
Definition psplay.h:85
Type and handle for a psplay tree node This node have to be placed inside users data.
Definition psplay.h:42