OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [newlib-1.18.0/] [newlib-1.18.0-or32-1.0rc2/] [newlib/] [libc/] [search/] [tfind.c] - Blame information for rev 520

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 207 jeremybenn
/*      $NetBSD: tfind.c,v 1.2 1999/09/16 11:45:37 lukem Exp $  */
2
 
3
/*
4
 * Tree search generalized from Knuth (6.2.2) Algorithm T just like
5
 * the AT&T man page says.
6
 *
7
 * The node_t structure is for internal use only, lint doesn't grok it.
8
 *
9
 * Written by reading the System V Interface Definition, not the code.
10
 *
11
 * Totally public domain.
12
 */
13
 
14
#include <sys/cdefs.h>
15
#if 0
16
#if defined(LIBC_SCCS) && !defined(lint)
17
__RCSID("$NetBSD: tfind.c,v 1.2 1999/09/16 11:45:37 lukem Exp $");
18
#endif /* LIBC_SCCS and not lint */
19
#endif
20
 
21
#include <assert.h>
22
#define _SEARCH_PRIVATE
23
#include <stdlib.h>
24
#include <search.h>
25
 
26
/* find a node, or return 0 */
27
void *
28
_DEFUN(tfind, (vkey, vrootp, compar),
29
        const void *vkey _AND           /* key to be found */
30
        void **vrootp _AND              /* address of the tree root */
31
        int (*compar)(const void *, const void *))
32
{
33
        node_t **rootp = (node_t **)vrootp;
34
 
35
        if (rootp == NULL)
36
                return NULL;
37
 
38
        while (*rootp != NULL) {                /* T1: */
39
                int r;
40
 
41
                if ((r = (*compar)(vkey, (*rootp)->key)) == 0)   /* T2: */
42
                        return *rootp;          /* key found */
43
                rootp = (r < 0) ?
44
                    &(*rootp)->llink :          /* T3: follow left branch */
45
                    &(*rootp)->rlink;           /* T4: follow right branch */
46
        }
47
        return NULL;
48
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.