Module Name:    src
Committed By:   christos
Date:           Sat Dec  1 20:33:02 UTC 2012

Modified Files:
        src/share/man/man3: Makefile
Added Files:
        src/share/man/man3: bitmap.3

Log Message:
add documentation for the bitmap macros


To generate a diff of this commit:
cvs rdiff -u -r1.79 -r1.80 src/share/man/man3/Makefile
cvs rdiff -u -r0 -r1.1 src/share/man/man3/bitmap.3

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/share/man/man3/Makefile
diff -u src/share/man/man3/Makefile:1.79 src/share/man/man3/Makefile:1.80
--- src/share/man/man3/Makefile:1.79	Tue Aug  9 13:58:27 2011
+++ src/share/man/man3/Makefile	Sat Dec  1 15:33:02 2012
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.79 2011/08/09 17:58:27 jruoho Exp $
+#	$NetBSD: Makefile,v 1.80 2012/12/01 20:33:02 christos Exp $
 #	@(#)Makefile	8.2 (Berkeley) 12/13/93
 
 MAN=	_DIAGASSERT.3 __CONCAT.3 __UNCONST.3 CMSG_DATA.3 \
@@ -6,7 +6,7 @@ MAN=	_DIAGASSERT.3 __CONCAT.3 __UNCONST.
 	__builtin_constant_p.3 __builtin_prefetch.3 \
 	__builtin_return_address.3 \
 	__builtin_types_compatible_p.3 __insn_barrier.3 \
-	assert.3 attribute.3 bitops.3 bits.3 bitstring.3 \
+	assert.3 attribute.3 bitmap.3 bitops.3 bits.3 bitstring.3 \
 	cdefs.3 dirent.3 dlfcn.3 dl_iterate_phdr.3 end.3 \
 	fast_divide32.3 ffs32.3 gcq.3 \
 	ilog2.3 intro.3 inttypes.3 iso646.3 limits.3 \
@@ -268,6 +268,11 @@ MLINKS+=CMSG_DATA.3 CMSG_FIRSTHDR.3 \
 	CMSG_DATA.3 CMSG_NXTHDR.3 \
 	CMSG_DATA.3 CMSG_SPACE.3 \
 	CMSG_DATA.3 cmsg.3
+MLINKS+=bitmap.3 __BITMAP_CLR.3 \
+	bitmap.3 __BITMAP_ISSET.3 \
+	bitmap.3 __BITMAP_SET.3 \
+	bitmap.3 __BITMAP_SIZE.3 \
+	bitmap.3 __BITMAP_ZERO.3
 
 .include <bsd.man.mk>
 .include <bsd.subdir.mk>

Added files:

Index: src/share/man/man3/bitmap.3
diff -u /dev/null src/share/man/man3/bitmap.3:1.1
--- /dev/null	Sat Dec  1 15:33:02 2012
+++ src/share/man/man3/bitmap.3	Sat Dec  1 15:33:02 2012
@@ -0,0 +1,133 @@
+.\"	$NetBSD: bitmap.3,v 1.1 2012/12/01 20:33:02 christos Exp $
+.\"
+.\" Copyright (c) 2012 The NetBSD Foundation, Inc.
+.\" All rights reserved.
+.\"
+.\" This code is derived from software contributed to The NetBSD Foundation
+.\" by Christos Zoulas.
+.\"
+.\" 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.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+.\" ``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 FOUNDATION OR CONTRIBUTORS
+.\" 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.
+.\"
+.Dd December 1, 2012
+.Dt bitmap 3
+.Os
+.Sh NAME
+.Nm __BITMAP_CLR ,
+.Nm __BITMAP_ISSET,
+.Nm __BITMAP_SET ,
+.Nm __BITMAP_SIZE ,
+.Nm __BITMAP_ZERO 
+.Nd bitmap manipulation macros
+.Sh LIBRARY
+.Lb libc
+.Sh SYNOPSIS
+.In sys/bitops.h
+.Fn __BITMAP_CLR "int bit" "type *bitmap"
+.Fn __BITMAP_ISSET "int bit" "type *bitmap"
+.Fn __BITMAP_SET "int bit" "type *bitmap"
+.Fn __BITMAP_SIZE "type" "int nbits"
+.Fn __BITMAP_ZERO "type *bitmap"
+.Sh DESCRIPTION
+The supplied macros are similar to the 
+.Xr select 2
+.Fn FD_SET
+family, and to the 
+.Xr bitstring 3
+library.
+They are different from
+.Fn FD_SET
+because they are designed to handle multiple sized bitmaps at the same time,
+and they can be of any integral type.
+They are different from
+.Xr bitstring 3
+because they are just macros, they don't allocate memory or use code,
+and they can be used in both kernel and userland.
+.Pp
+The following macros are provided for manipulating creating and manipulating
+bitmaps:
+.Pp
+.Fn __BITMAP_CLR bit, bitmap
+initializes a descriptor set pointed to by
+.Fa bitmap
+to the null set.
+.Pp
+.Fn __BITMAP_ISSET bit bitmap
+is non-zero if
+.Fa bit
+is a member of
+.Fa bitmap ,
+zero otherwise.
+.Pp
+.Fn __BITMAP_SIZE type nbits
+Returns the number of elements would be required of the given
+.Fa type
+to hold
+.Fa nbits .
+.Pp
+.Fn __BITMAP_SET bit bitmap
+Sets the given
+.Fa bit
+in the
+.Fa bitmap .
+.Pp
+.Fn __BITMAP_CLR bit bitmap
+removes the given
+.Fa bit
+from the
+.Fa bitmap .
+.Pp
+The behavior of these macros is undefined for negative
+bit values or ones greater than the number of bits the bitmap can hold.
+.Sh EXAMPLES
+.Bd -literal
+#include \*[Lt]sys/bitops.h\*[Gt]
+
+int
+main(int argc, char **argv)
+{
+	uint32_t bitmap[__BITMAP_SIZE(uint32_t, 5000)];
+
+	/* Initialize the read set to null */
+	__BITMAP_ZERO(bitmap);
+
+	/* Set bit 1 */
+	__BITMAP_SET(1, bitmap);
+
+	for (size_t i = 0; i \*[Lt]= 5000; i++) {
+		if (__BITMAP_ISSET(i, bitmap)) {
+			/* Should just print 1 */
+			printf("Bit %zu is set\en", i);
+			__BITMAP_CLR(i, bitmap);
+		}
+		break;
+	}
+	return 0;
+}
+.Ed
+.Sh SEE ALSO
+.Xr select 2 ,
+.Xr bitstring 3
+.Sh HISTORY
+The
+.Fn __BITMAP_*
+macros appeared in
+.Nx 7 .

Reply via email to