xref: /csrg-svn/share/man/man3/bitstring.3 (revision 63897)
148349Scael.\" Copyright (c) 1989, 1991 The Regents of the University of California.
239706Sbostic.\" All rights reserved.
339706Sbostic.\"
439706Sbostic.\" This code is derived from software contributed to Berkeley by
539706Sbostic.\" Paul Vixie.
643583Strent.\" %sccs.include.redist.man%
739706Sbostic.\"
8*63897Sbostic.\"     @(#)bitstring.3	5.6 (Berkeley) 07/19/93
939706Sbostic.\"
1048349Scael.Dd
1148349Scael.Dt BITSTRING 3
1248349Scael.Os BSD 4
1348349Scael.Sh NAME
1448349Scael.Nm bit_alloc ,
1548349Scael.Nm bit_clear ,
1648349Scael.Nm bit_decl ,
1748349Scael.Nm bit_ffs ,
1848349Scael.Nm bit_nclear ,
1948349Scael.Nm bit_nset,
2048349Scael.Nm bit_set ,
2148349Scael.Nm bitstr_size ,
2248349Scael.Nm bit_test
2348349Scael.Nd bit-string manipulation macros
2448349Scael.Sh SYNOPSIS
2548349Scael.Fd #include <bitstring.h>
2648349Scael.Ft bitstr_t *
2748349Scael.Fn bit_alloc "int nbits"
2848349Scael.Fn bit_decl "bit_str name" "int nbits"
2948349Scael.Fn bit_clear "bit_str name" "int bit"
3048349Scael.Fn bit_ffc "bit_str name" "int nbits" "int *value"
3148349Scael.Fn bit_ffs "bit_str name" "int nbits" "int *value"
3248349Scael.Fn bit_nclear "bit_str name" "int start" "int stop"
3348349Scael.Fn bit_nset "bit_str name" "int start" "int stop"
3448349Scael.Fn bit_set "bit_str name" "int bit"
3548349Scael.Fn bitstr_size "int nbits"
3648349Scael.Fn bit_test "bit_str name" "int bit"
3748349Scael.Sh DESCRIPTION
3839706SbosticThese macros operate on strings of bits.
3948349Scael.Pp
4048349ScaelThe macro
4148349Scael.Fn bit_alloc
4239706Sbosticreturns a pointer of type
4348349Scael.Dq Fa "bitstr_t *"
4439706Sbosticto sufficient space to store
4548349Scael.Fa nbits
4648349Scaelbits, or
4748349Scael.Dv NULL
4848349Scaelif no space is available.
4948349Scael.Pp
5048349ScaelThe macro
5148349Scael.Fn bit_decl
5248349Scaelallocates sufficient space to store
5348349Scael.Fa nbits
5439706Sbosticbits on the stack.
5548349Scael.Pp
5648349ScaelThe macro
5748349Scael.Fn bitstr_size
5839706Sbosticreturns the number of elements of type
5948349Scael.Fa bitstr_t
6039706Sbosticnecessary to store
6148349Scael.Fa nbits
6239706Sbosticbits.
6339706SbosticThis is useful for copying bit strings.
6448349Scael.Pp
6548349ScaelThe macros
6648349Scael.Fn bit_clear
6739706Sbosticand
6848349Scael.Fn bit_set
6939706Sbosticclear or set the zero-based numbered bit
7048349Scael.Fa bit ,
7139706Sbosticin the bit string
7248349Scael.Ar name .
7348349Scael.Pp
7448349ScaelThe
7548349Scael.Fn bit_nset
7639706Sbosticand
7748349Scael.Fn bit_nclear
7848349Scaelmacros
7939706Sbosticset or clear the zero-based numbered bits from
8048349Scael.Fa start
8139706Sbosticto
8248349Scael.Fa stop
8339706Sbosticin the bit string
8448349Scael.Ar name .
8548349Scael.Pp
8648349ScaelThe
8748349Scael.Fn bit_test
8848349Scaelmacro
89*63897Sbosticevaluates to non-zero if the zero-based numbered bit
9048349Scael.Fa bit
9139706Sbosticof bit string
9248349Scael.Fa name
93*63897Sbosticis set, and zero otherwise.
9448349Scael.Pp
9548349ScaelThe
9648349Scael.Fn bit_ffs
9748349Scaelmacro
9840741Sbosticstores in the location referenced by
9948349Scael.Fa value
10039706Sbosticthe zero-based number of the first bit set in the array of
10148349Scael.Fa nbits
10239706Sbosticbits referenced by
10348349Scael.Fa name .
10440741SbosticIf no bits are set, the location referenced by
10548349Scael.Fa value
10648349Scaelis set to \-1.
10748349Scael.Pp
10848349ScaelThe macro
10948349Scael.Fn bit_ffc
11040741Sbosticstores in the location referenced by
11148349Scael.Fa value
11239706Sbosticthe zero-based number of the first bit not set in the array of
11348349Scael.Fa nbits
11439706Sbosticbits referenced by
11548349Scael.Fa name .
11640741SbosticIf all bits are set, the location referenced by
11748349Scael.Fa value
11848349Scaelis set to \-1.
11948349Scael.Pp
12040741SbosticThe arguments to these macros are evaluated only once and may safely
12140741Sbostichave side effects.
12248349Scael.Sh EXAMPLE
12348349Scael.Bd -literal -offset indent
12439706Sbostic#include <limits.h>
12539706Sbostic#include <bitstring.h>
12639706Sbostic
12739706Sbostic...
12839706Sbostic#define	LPR_BUSY_BIT		0
12939706Sbostic#define	LPR_FORMAT_BIT		1
13039706Sbostic#define	LPR_DOWNLOAD_BIT	2
13139706Sbostic...
13239706Sbostic#define	LPR_AVAILABLE_BIT	9
13339706Sbostic#define	LPR_MAX_BITS		10
13439706Sbostic
13539706Sbosticmake_lpr_available()
13639706Sbostic{
13739706Sbostic	bitstr_t bit_decl(bitlist, LPR_MAX_BITS);
13839706Sbostic	...
13939706Sbostic	bit_nclear(bitlist, 0, LPR_MAX_BITS - 1);
14039706Sbostic	...
14139706Sbostic	if (!bit_test(bitlist, LPR_BUSY_BIT)) {
14239706Sbostic		bit_clear(bitlist, LPR_FORMAT_BIT);
14339706Sbostic		bit_clear(bitlist, LPR_DOWNLOAD_BIT);
14439706Sbostic		bit_set(bitlist, LPR_AVAILABLE_BIT);
14539706Sbostic	}
14639706Sbostic}
14748349Scael.Ed
14848349Scael.Sh SEE ALSO
14948349Scael.Xr malloc 3
15048349Scael.Sh HISTORY
15148349ScaelThe
15262960Sbostic.Nm bitstring
15362960Sbosticfunctions first appeared in 4.4BSD.
154