|
|
1.1 root 1: .TH BITS 3+
2: .CT 2 datatype
3: .SH NAME
4: bits \- variable length bit strings
5: .SH SYNOPSIS
6: .nf
7: .B "#include <Bits.h>"
8: .PP
9: .B "typedef unsigned long Bits_chunk;"
10: .PP
11: .B "struct Bits {"
12: .B " Bits() { }"
13: .B " Bits(Bits_chunk, unsigned = 1);"
14: .B " Bits(const Bits&)"
15: .B " ~Bits();
16: .BR " Bits& operator= (const Bits&); // " also " = &= |= ^=
17: .BR " Bits& operator<<= (int); // " also " >>=
18: .B " int operator[] (unsigned);"
19: .B " operator Bits_chunk();"
20: .B " unsigned size();"
21: .B " unsigned size(unsigned);"
22: .B " Bits& compl();"
23: .B " Bits& concat(const Bits&);"
24: .B " Bits& set(unsigned, unsigned long = 1);"
25: .B " Bits& reset(unsigned);"
26: .B " Bits& compl(unsigned);"
27: .B " unsigned count();"
28: .B " unsigned signif();"
29: .B " unsigned trim();"
30: .B "};"
31: .PP
32: .B "Bits operator~ (const Bits&);
33: .BR "Bits operator& (const Bits&, const Bits&); // " also " | ^
34: .BR "Bits operator<< (const Bits&, int); // " also " >>
35: .BR "int operator< (const Bits&, const Bits&); // " also " > <= >= == !=
36: .fi
37: .SH DESCRIPTION
38: A
39: .B Bits
40: object contains a variable-length bit string.
41: The bits of a
42: .B Bits
43: object
44: .I b
45: are numbered from 0 through
46: .IB b .size()\fR\-1,\fP
47: with the rightmost bit numbered 0.
48: .PP
49: .B Bits_chunk
50: is the largest unsigned integral type
51: acceptable for conversion to and from
52: .BR Bits ,
53: .BR "unsigned long"
54: in this implementation.
55: .SS Constructors
56: .TP \w'\fIa\fL.concat(\fIb\fL)\ 'u
57: .B Bits()
58: An empty bit string.
59: .TP
60: .BI Bits( n )
61: The bits are copied from the binary representation of
62: .I n
63: with the ones-digit of
64: .I n
65: becoming bit 0.
66: Leading zero-bits are removed,
67: except that
68: .B Bits(0)
69: is a one-bit string.
70: .TP
71: .BI Bits( n , m )
72: The same, but padded with leading zeros to size
73: .I m
74: if necessary.
75: .SS Operators
76: Bit strings have
77: value semantics;
78: assigning a
79: .B Bits
80: object or passing it to or returning it from a function
81: creates a copy of its value.
82: The meanings of operators are mostly predictable from C.
83: .PP
84: Under binary and comparison operators,
85: the shorter operand
86: is considered to be padded on the left with zeros to the
87: length of the longer.
88: If, after padding, two strings of different length compare equal,
89: the shorter is deemed the smaller.
90: .PP
91: Negative shift amounts
92: reverse the sense of shift operators.
93: .PP
94: Under conversion (or assignment) to a
95: .BR Bits_chunk ,
96: a
97: .B Bits
98: is interpreted as an unsigned integer.
99: If it has a value small enough to fit,
100: that value is assigned.
101: Otherwise, a non-zero value is
102: assigned.
103: Thus a
104: .B Bits
105: is considered `true' in an
106: .B if
107: test if it contains any one-bit, `false' otherwise.
108: .TP \w'\fIa\fL.concat(\fIb\fL)\ 'u
109: .IB a [ s ]
110: Bit number
111: .I s
112: of
113: .IR a ;
114: 0 if
115: .I s
116: is out of bounds.
117: .SS Other functions
118: .TP \w'\fIa\fL.concat(\fIb\fL)\ 'u
119: .IB a .size( s )
120: Set the size of
121: .I a
122: to
123: .I s
124: by truncating or padding with zeros on the left as necessary.
125: Return the new size.
126: .TP
127: .IB a .compl()
128: Complement the bits of
129: .I a.
130: Return
131: .I a.
132: .TP
133: .IB a .set( s )
134: .PD 0
135: .TP
136: .IB a .reset( s )
137: .TP
138: .IB a .compl ( s )
139: Set, reset, or complement bit
140: .I s
141: of
142: .I a.
143: No effect if
144: .IB a .size()<= s.
145: Return
146: .I a.
147: .PD
148: .TP
149: .IB a .set( s , n )
150: If
151: .I n
152: is 0, reset bit
153: .I s
154: of
155: .I a,
156: otherwise set bit
157: .I s.
158: Equivalent to
159: .BR "n? a.set(s): a.reset(s)" .
160: .TP
161: .IB a .count()
162: Return the number of one-bits in
163: .I a.
164: .TP
165: .IB a .signif()
166: Return the number of significant bits in
167: .BR a :
168: one more than the
169: number of the leftmost one-bit, or
170: zero if there is no one-bit.
171: .TP
172: .IB a .trim()
173: Discard high-order zero-bits.
174: Equivalent to
175: .BR a.size(a.signif()) .
176: .TP
177: .IB a .concat( b )
178: Concatenate the value of
179: .I b
180: to the right (low-order) end of
181: .I a.
182: Return
183: .I a.
184: .TP
185: .BI concat( a , b )
186: Return a newly created concatenated object.
187: .SH DIAGNOSTICS
188: An operation that runs out of memory sets
189: the length of the affected
190: .B Bits
191: to zero.
192: .SH BUGS
193: Too bad C++ can't support
194: .BR "a[s] = n" .
195: .br
196: Things would be more consistent if
197: .B Bits(0).size()
198: were zero.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.