 b6cbf7203b
			
		
	
	
		b6cbf7203b
		
	
	
	
	
		
			
			This patch imports the unmodified current version of NetBSD libc. The NetBSD includes are in /nbsd_include, while the libc code itself is split between lib/nbsd_libc and common/lib/libc.
		
			
				
	
	
		
			142 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			142 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .\" $NetBSD: tsearch.3,v 1.12 2010/04/30 10:09:23 jruoho Exp $
 | |
| .\" Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com>
 | |
| .\" All rights reserved.
 | |
| .\"
 | |
| .\" Redistribution and use in source and binary forms, with or without
 | |
| .\" modification, are permitted provided that the following conditions
 | |
| .\" are met:
 | |
| .\" 1. Redistributions of source code must retain the above copyright
 | |
| .\"    notice, this list of conditions and the following disclaimer.
 | |
| .\" 2. Redistributions in binary form must reproduce the above copyright
 | |
| .\"    notice, this list of conditions and the following disclaimer in the
 | |
| .\"    documentation and/or other materials provided with the distribution.
 | |
| .\" 3. The name of the author may not be used to endorse or promote products
 | |
| .\"    derived from this software without specific prior written permission.
 | |
| .\"
 | |
| .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
 | |
| .\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 | |
| .\" AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
 | |
| .\" THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 | |
| .\" EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 | |
| .\" PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
 | |
| .\" OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 | |
| .\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 | |
| .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 | |
| .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | |
| .\"
 | |
| .\"	OpenBSD: tsearch.3,v 1.2 1998/06/21 22:13:49 millert Exp
 | |
| .\"
 | |
| .Dd April 30, 2010
 | |
| .Dt TSEARCH 3
 | |
| .Os
 | |
| .Sh NAME
 | |
| .Nm tsearch, tfind, tdelete, twalk
 | |
| .Nd manipulate binary search trees
 | |
| .Sh SYNOPSIS
 | |
| .In search.h
 | |
| .Ft void *
 | |
| .Fn tdelete "const void * restrict key" "void ** restrict rootp" "int (*compar) (const void *, const void *)"
 | |
| .Ft void *
 | |
| .Fn tfind "const void *key" "const void * const *rootp" "int (*compar) (const void *, const void *)"
 | |
| .Ft void *
 | |
| .Fn tsearch "const void *key" "void **rootp" "int (*compar) (const void *, const void *)"
 | |
| .Ft void
 | |
| .Fn twalk "const void *root" "void (*action) (const void *, VISIT, int)"
 | |
| .Sh DESCRIPTION
 | |
| The
 | |
| .Fn tdelete ,
 | |
| .Fn tfind ,
 | |
| .Fn tsearch ,
 | |
| and
 | |
| .Fn twalk
 | |
| functions manage binary search trees based on algorithms T and D
 | |
| from Knuth (6.2.2).
 | |
| The comparison function passed in by
 | |
| the user has the same style of return values as
 | |
| .Xr strcmp 3 .
 | |
| .Pp
 | |
| .Fn tfind
 | |
| searches for the datum matched by the argument
 | |
| .Fa key
 | |
| in the binary tree rooted at
 | |
| .Fa rootp ,
 | |
| returning a pointer to the datum if it is found and NULL
 | |
| if it is not.
 | |
| .Pp
 | |
| .Fn tsearch
 | |
| is identical to
 | |
| .Fn tfind
 | |
| except that if no match is found,
 | |
| .Fa key
 | |
| is inserted into the tree and a pointer to it is returned.
 | |
| If
 | |
| .Fa rootp
 | |
| points to a NULL value a new binary search tree is created.
 | |
| .Pp
 | |
| .Fn tdelete
 | |
| deletes a node from the specified binary search tree and returns
 | |
| a pointer to the parent of the node to be deleted.
 | |
| It takes the same arguments as
 | |
| .Fn tfind
 | |
| and
 | |
| .Fn tsearch .
 | |
| If the node to be deleted is the root of the binary search tree,
 | |
| .Fa rootp
 | |
| will be adjusted.
 | |
| .Pp
 | |
| .Fn twalk
 | |
| walks the binary search tree rooted in
 | |
| .Va root
 | |
| and calls the function
 | |
| .Fa action
 | |
| on each node.
 | |
| .Fa Action
 | |
| is called with three arguments: a pointer to the current node,
 | |
| a value from the enum
 | |
| .Sy "typedef enum { preorder, postorder, endorder, leaf } VISIT;"
 | |
| specifying the traversal type, and a node level (where level
 | |
| zero is the root of the tree).
 | |
| .Sh RETURN VALUES
 | |
| The
 | |
| .Fn tsearch
 | |
| function returns NULL if allocation of a new node fails (usually
 | |
| due to a lack of free memory).
 | |
| .Pp
 | |
| .Fn tfind ,
 | |
| .Fn tsearch ,
 | |
| and
 | |
| .Fn tdelete
 | |
| return NULL if
 | |
| .Fa rootp
 | |
| is NULL or the datum cannot be found.
 | |
| .Pp
 | |
| The
 | |
| .Fn twalk
 | |
| function returns no value.
 | |
| .Sh SEE ALSO
 | |
| .Xr bsearch 3 ,
 | |
| .Xr hsearch 3 ,
 | |
| .Xr lsearch 3
 | |
| .Sh STANDARDS
 | |
| These functions conform to
 | |
| .St -p1003.1-2001 .
 | |
| .Sh CAVEATS
 | |
| The
 | |
| .St -p1003.1-2001
 | |
| standard does not specify what value should be returned when deleting
 | |
| the root node.
 | |
| Since implementations vary, user of
 | |
| .Fn tdelete
 | |
| should not rely on any specific behaviour.
 | |
| The
 | |
| .St -p1003.1-2008
 | |
| revision tried to clarify the issue with the following wording:
 | |
| .Do
 | |
| the
 | |
| .Fn tdelete
 | |
| function shall return a pointer to the parent of the deleted node,
 | |
| or an unspecified non-NULL pointer if the deleted node was the root node, or a
 | |
| .Dv NULL
 | |
| pointer if the node is not found
 | |
| .Dc .
 |