1Vector(3)             User Contributed Perl Documentation            Vector(3)
2
3
4

NAME

6       Bit::Vector - Efficient bit vector, set of integers and "big int" math
7       library
8

SYNOPSIS

10   OVERLOADED OPERATORS
11       See Bit::Vector::Overload(3).
12
13   MORE STRING IMPORT/EXPORT
14       See Bit::Vector::String(3).
15
16   CLASS METHODS
17         Version
18             $version = Bit::Vector->Version();
19
20         Word_Bits
21             $bits = Bit::Vector->Word_Bits();  #  bits in a machine word
22
23         Long_Bits
24             $bits = Bit::Vector->Long_Bits();  #  bits in an unsigned long
25
26         new
27             $vector = Bit::Vector->new($bits);  #  bit vector constructor
28
29             @veclist = Bit::Vector->new($bits,$count);
30
31         new_Hex
32             $vector = Bit::Vector->new_Hex($bits,$string);
33
34         new_Bin
35             $vector = Bit::Vector->new_Bin($bits,$string);
36
37         new_Dec
38             $vector = Bit::Vector->new_Dec($bits,$string);
39
40         new_Enum
41             $vector = Bit::Vector->new_Enum($bits,$string);
42
43         Concat_List
44             $vector = Bit::Vector->Concat_List(@vectors);
45
46   OBJECT METHODS
47         new
48             $vec2 = $vec1->new($bits);  #  alternative call of constructor
49
50             @veclist = $vec->new($bits,$count);
51
52         Shadow
53             $vec2 = $vec1->Shadow();  #  new vector, same size but empty
54
55         Clone
56             $vec2 = $vec1->Clone();  #  new vector, exact duplicate
57
58         Concat
59             $vector = $vec1->Concat($vec2);
60
61         Concat_List
62             $vector = $vec1->Concat_List($vec2,$vec3,...);
63
64         Size
65             $bits = $vector->Size();
66
67         Resize
68             $vector->Resize($bits);
69             $vector->Resize($vector->Size()+5);
70             $vector->Resize($vector->Size()-5);
71
72         Copy
73             $vec2->Copy($vec1);
74
75         Empty
76             $vector->Empty();
77
78         Fill
79             $vector->Fill();
80
81         Flip
82             $vector->Flip();
83
84         Primes
85             $vector->Primes();  #  Sieve of Erathostenes
86
87         Reverse
88             $vec2->Reverse($vec1);
89
90         Interval_Empty
91             $vector->Interval_Empty($min,$max);
92
93         Interval_Fill
94             $vector->Interval_Fill($min,$max);
95
96         Interval_Flip
97             $vector->Interval_Flip($min,$max);
98
99         Interval_Reverse
100             $vector->Interval_Reverse($min,$max);
101
102         Interval_Scan_inc
103             if (($min,$max) = $vector->Interval_Scan_inc($start))
104
105         Interval_Scan_dec
106             if (($min,$max) = $vector->Interval_Scan_dec($start))
107
108         Interval_Copy
109             $vec2->Interval_Copy($vec1,$offset2,$offset1,$length);
110
111         Interval_Substitute
112             $vec2->Interval_Substitute($vec1,$off2,$len2,$off1,$len1);
113
114         is_empty
115             if ($vector->is_empty())
116
117         is_full
118             if ($vector->is_full())
119
120         equal
121             if ($vec1->equal($vec2))
122
123         Lexicompare (unsigned)
124             if ($vec1->Lexicompare($vec2) == 0)
125             if ($vec1->Lexicompare($vec2) != 0)
126             if ($vec1->Lexicompare($vec2) <  0)
127             if ($vec1->Lexicompare($vec2) <= 0)
128             if ($vec1->Lexicompare($vec2) >  0)
129             if ($vec1->Lexicompare($vec2) >= 0)
130
131         Compare (signed)
132             if ($vec1->Compare($vec2) == 0)
133             if ($vec1->Compare($vec2) != 0)
134             if ($vec1->Compare($vec2) <  0)
135             if ($vec1->Compare($vec2) <= 0)
136             if ($vec1->Compare($vec2) >  0)
137             if ($vec1->Compare($vec2) >= 0)
138
139         to_Hex
140             $string = $vector->to_Hex();
141
142         from_Hex
143             $vector->from_Hex($string);
144
145         to_Bin
146             $string = $vector->to_Bin();
147
148         from_Bin
149             $vector->from_Bin($string);
150
151         to_Dec
152             $string = $vector->to_Dec();
153
154         from_Dec
155             $vector->from_Dec($string);
156
157         to_Enum
158             $string = $vector->to_Enum();  #  e.g. "2,3,5-7,11,13-19"
159
160         from_Enum
161             $vector->from_Enum($string);
162
163         Bit_Off
164             $vector->Bit_Off($index);
165
166         Bit_On
167             $vector->Bit_On($index);
168
169         bit_flip
170             $bit = $vector->bit_flip($index);
171
172         bit_test
173         contains
174             $bit = $vector->bit_test($index);
175             $bit = $vector->contains($index);
176             if ($vector->bit_test($index))
177             if ($vector->contains($index))
178
179         Bit_Copy
180             $vector->Bit_Copy($index,$bit);
181
182         LSB (least significant bit)
183             $vector->LSB($bit);
184
185         MSB (most significant bit)
186             $vector->MSB($bit);
187
188         lsb (least significant bit)
189             $bit = $vector->lsb();
190
191         msb (most significant bit)
192             $bit = $vector->msb();
193
194         rotate_left
195             $carry = $vector->rotate_left();
196
197         rotate_right
198             $carry = $vector->rotate_right();
199
200         shift_left
201             $carry = $vector->shift_left($carry);
202
203         shift_right
204             $carry = $vector->shift_right($carry);
205
206         Move_Left
207             $vector->Move_Left($bits);  #  shift left "$bits" positions
208
209         Move_Right
210             $vector->Move_Right($bits);  #  shift right "$bits" positions
211
212         Insert
213             $vector->Insert($offset,$bits);
214
215         Delete
216             $vector->Delete($offset,$bits);
217
218         increment
219             $carry = $vector->increment();
220
221         decrement
222             $carry = $vector->decrement();
223
224         inc
225             $overflow = $vec2->inc($vec1);
226
227         dec
228             $overflow = $vec2->dec($vec1);
229
230         add
231             $carry = $vec3->add($vec1,$vec2,$carry);
232             ($carry,$overflow) = $vec3->add($vec1,$vec2,$carry);
233
234         subtract
235             $carry = $vec3->subtract($vec1,$vec2,$carry);
236             ($carry,$overflow) = $vec3->subtract($vec1,$vec2,$carry);
237
238         Neg
239         Negate
240             $vec2->Neg($vec1);
241             $vec2->Negate($vec1);
242
243         Abs
244         Absolute
245             $vec2->Abs($vec1);
246             $vec2->Absolute($vec1);
247
248         Sign
249             if ($vector->Sign() == 0)
250             if ($vector->Sign() != 0)
251             if ($vector->Sign() <  0)
252             if ($vector->Sign() <= 0)
253             if ($vector->Sign() >  0)
254             if ($vector->Sign() >= 0)
255
256         Multiply
257             $vec3->Multiply($vec1,$vec2);
258
259         Divide
260             $quot->Divide($vec1,$vec2,$rest);
261
262         GCD (Greatest Common Divisor)
263             $vecgcd->GCD($veca,$vecb);
264             $vecgcd->GCD($vecx,$vecy,$veca,$vecb);
265
266         Power
267             $vec3->Power($vec1,$vec2);
268
269         Block_Store
270             $vector->Block_Store($buffer);
271
272         Block_Read
273             $buffer = $vector->Block_Read();
274
275         Word_Size
276             $size = $vector->Word_Size();  #  number of words in "$vector"
277
278         Word_Store
279             $vector->Word_Store($offset,$word);
280
281         Word_Read
282             $word = $vector->Word_Read($offset);
283
284         Word_List_Store
285             $vector->Word_List_Store(@words);
286
287         Word_List_Read
288             @words = $vector->Word_List_Read();
289
290         Word_Insert
291             $vector->Word_Insert($offset,$count);
292
293         Word_Delete
294             $vector->Word_Delete($offset,$count);
295
296         Chunk_Store
297             $vector->Chunk_Store($chunksize,$offset,$chunk);
298
299         Chunk_Read
300             $chunk = $vector->Chunk_Read($chunksize,$offset);
301
302         Chunk_List_Store
303             $vector->Chunk_List_Store($chunksize,@chunks);
304
305         Chunk_List_Read
306             @chunks = $vector->Chunk_List_Read($chunksize);
307
308         Index_List_Remove
309             $vector->Index_List_Remove(@indices);
310
311         Index_List_Store
312             $vector->Index_List_Store(@indices);
313
314         Index_List_Read
315             @indices = $vector->Index_List_Read();
316
317         Or
318         Union
319             $vec3->Or($vec1,$vec2);
320             $set3->Union($set1,$set2);
321
322         And
323         Intersection
324             $vec3->And($vec1,$vec2);
325             $set3->Intersection($set1,$set2);
326
327         AndNot
328         Difference
329             $vec3->AndNot($vec1,$vec2);
330             $set3->Difference($set1,$set2);
331
332         Xor
333         ExclusiveOr
334             $vec3->Xor($vec1,$vec2);
335             $set3->ExclusiveOr($set1,$set2);
336
337         Not
338         Complement
339             $vec2->Not($vec1);
340             $set2->Complement($set1);
341
342         subset
343             if ($set1->subset($set2))  #  true if $set1 is subset of $set2
344
345         Norm
346             $norm = $set->Norm();
347             $norm = $set->Norm2();
348             $norm = $set->Norm3();
349
350         Min
351             $min = $set->Min();
352
353         Max
354             $max = $set->Max();
355
356         Multiplication
357             $matrix3->Multiplication($rows3,$cols3,
358                             $matrix1,$rows1,$cols1,
359                             $matrix2,$rows2,$cols2);
360
361         Product
362             $matrix3->Product($rows3,$cols3,
363                      $matrix1,$rows1,$cols1,
364                      $matrix2,$rows2,$cols2);
365
366         Closure
367             $matrix->Closure($rows,$cols);
368
369         Transpose
370             $matrix2->Transpose($rows2,$cols2,$matrix1,$rows1,$cols1);
371

IMPORTANT NOTES

373       • Method naming conventions
374
375         Method names completely in lower case indicate a boolean return
376         value.
377
378         (Except for the bit vector constructor method ""new()"", of course.)
379
380       • Boolean values
381
382         Boolean values in this module are always a numeric zero ("0") for
383         "false" and a numeric one ("1") for "true".
384
385       • Negative numbers
386
387         All numeric input parameters passed to any of the methods in this
388         module are regarded as being UNSIGNED (as opposed to the contents of
389         the bit vectors themselves, which are usually considered to be
390         SIGNED).
391
392         As a consequence, whenever you pass a negative number as an argument
393         to some method of this module, it will be treated as a (usually very
394         large) positive number due to its internal two's complement binary
395         representation, usually resulting in an "index out of range" error
396         message and program abortion.
397
398       • Bit order
399
400         Note that bit vectors are stored least order bit and least order word
401         first internally.
402
403         I.e., bit #0 of any given bit vector corresponds to bit #0 of word #0
404         in the array of machine words representing the bit vector.
405
406         (Where word #0 comes first in memory, i.e., it is stored at the least
407         memory address in the allocated block of memory holding the given bit
408         vector.)
409
410         Note however that machine words can be stored least order byte first
411         or last, depending on your system's implementation.
412
413         When you are exporting or importing a whole bit vector at once using
414         the methods ""Block_Read()"" and ""Block_Store()"" (the only time in
415         this module where this could make any difference), however, a
416         conversion to and from "least order byte first" order is
417         automatically supplied.
418
419         In other words, what ""Block_Read()"" provides and what
420         ""Block_Store()"" expects is always in "least order byte first"
421         order, regardless of the order in which words are stored internally
422         on your machine.
423
424         This is to make sure that what you export on one machine using
425         ""Block_Read()"" can always be read in correctly with
426         ""Block_Store()"" on a different machine.
427
428         Note further that whenever bit vectors are converted to and from
429         (binary or hexadecimal) strings, the RIGHTMOST bit is always the
430         LEAST SIGNIFICANT one, and the LEFTMOST bit is always the MOST
431         SIGNIFICANT bit.
432
433         This is because in our western culture, numbers are always
434         represented in this way (least significant to most significant digits
435         go from right to left).
436
437         Of course this requires an internal reversion of order, which the
438         corresponding conversion methods perform automatically (without any
439         additional overhead, it's just a matter of starting the internal loop
440         at the bottom or the top end).
441
442       • "Word" related methods
443
444         Note that all methods whose names begin with ""Word_"" are MACHINE-
445         DEPENDENT!
446
447         They depend on the size (number of bits) of an "unsigned int" (C
448         type) on your machine.
449
450         Therefore, you should only use these methods if you are ABSOLUTELY
451         CERTAIN that portability of your code is not an issue!
452
453         Note that you can use arbitrarily large chunks (i.e., fragments of
454         bit vectors) of up to 32 bits IN A PORTABLE WAY using the methods
455         whose names begin with ""Chunk_"".
456
457       • Chunk sizes
458
459         Note that legal chunk sizes for all methods whose names begin with
460         ""Chunk_"" range from "1" to ""Bit::Vector->Long_Bits();"" bits ("0"
461         is NOT allowed!).
462
463         In order to make your programs portable, however, you shouldn't use
464         chunk sizes larger than 32 bits, since this is the minimum size of an
465         "unsigned long" (C type) on all systems, as prescribed by ANSI C.
466
467       • Matching sizes
468
469         In general, for methods involving several bit vectors at the same
470         time, all bit vector arguments must have identical sizes (number of
471         bits), or a fatal "size mismatch" error will occur.
472
473         Exceptions from this rule are the methods ""Concat()"",
474         ""Concat_List()"", ""Copy()"", ""Interval_Copy()"" and
475         ""Interval_Substitute()"", where no conditions at all are imposed on
476         the size of their bit vector arguments.
477
478         In method ""Multiply()"", all three bit vector arguments must in
479         principle obey the rule of matching sizes, but the bit vector in
480         which the result of the multiplication is to be stored may be larger
481         than the two bit vector arguments containing the factors for the
482         multiplication.
483
484         In method ""Power()"", the bit vector for the result must be the same
485         size or greater than the base of the exponentiation term. The
486         exponent can be any size.
487
488       • Index ranges
489
490         All indices for any given bits must lie between "0" and
491         ""$vector->Size()-1"", or a fatal "index out of range" error will
492         occur.
493
494       • Object persistence
495
496         Since version 6.5, "Bit::Vector" objects can be serialized and de-
497         serialized automatically with "Storable", out-of-the-box, without
498         requiring any further user action for this to work.
499
500         This is also true for nested data structures (since version 6.8).
501
502         See the Storable(3) documentation for more details.
503

DESCRIPTION

505   OVERLOADED OPERATORS
506       See Bit::Vector::Overload(3).
507
508   MORE STRING IMPORT/EXPORT
509       See Bit::Vector::String(3).
510
511   CLASS METHODS
512       • "$version = Bit::Vector->Version();"
513
514         Returns the current version number of this module.
515
516       • "$bits = Bit::Vector->Word_Bits();"
517
518         Returns the number of bits of an "unsigned int" (C type) on your
519         machine.
520
521         (An "unsigned int" is also called a "machine word", hence the name of
522         this method.)
523
524       • "$bits = Bit::Vector->Long_Bits();"
525
526         Returns the number of bits of an "unsigned long" (C type) on your
527         machine.
528
529       • "$vector = Bit::Vector->new($bits);"
530
531         This is the bit vector constructor method.
532
533         Call this method to create a new bit vector containing "$bits" bits
534         (with indices ranging from "0" to ""$bits-1"").
535
536         Note that - in contrast to previous versions - bit vectors of length
537         zero (i.e., with "$bits = 0") are permitted now.
538
539         The method returns a reference to the newly created bit vector.
540
541         A new bit vector is always initialized so that all bits are cleared
542         (turned off).
543
544         An exception will be raised if the method is unable to allocate the
545         necessary memory.
546
547         Note that if you specify a negative number for "$bits" it will be
548         interpreted as a large positive number due to its internal two's
549         complement binary representation.
550
551         In such a case, the bit vector constructor method will obediently
552         attempt to create a bit vector of that size, probably resulting in an
553         exception, as explained above.
554
555       • "@veclist = Bit::Vector->new($bits,$count);"
556
557         You can also create more than one bit vector at a time if you specify
558         the optional second parameter "$count".
559
560         The method returns a list of "$count" bit vectors which all have the
561         same number of bits "$bits" (and which are all initialized, i.e., all
562         bits are cleared).
563
564         If "$count" is zero, an empty list is returned.
565
566         If "$bits" is zero, a list of null-sized bit vectors is returned.
567
568         Note again that if you specify a negative number for "$count" it will
569         be interpreted as a large positive number due to its internal two's
570         complement binary representation.
571
572         In such a case, the bit vector constructor method will obediently
573         attempt to create that many bit vectors, probably resulting in an
574         exception ("out of memory").
575
576       • "$vector = Bit::Vector->new_Hex($bits,$string);"
577
578         This method is an alternative constructor which allows you to create
579         a new bit vector object (with "$bits" bits) and to initialize it all
580         in one go.
581
582         The method internally first calls the bit vector constructor method
583         ""new()"" and then passes the given string to the method
584         ""from_Hex()"".
585
586         However, this method is more efficient than performing these two
587         steps separately: First because in this method, the memory area
588         occupied by the new bit vector is not initialized to zeros (which is
589         pointless in this case), and second because it saves you from the
590         associated overhead of one additional method invocation.
591
592         An exception will be raised if the necessary memory cannot be
593         allocated (see the description of the method ""new()"" immediately
594         above for possible causes) or if the given string cannot be converted
595         successfully (see the description of the method ""from_Hex()""
596         further below for details).
597
598         In the latter case, the memory occupied by the new bit vector is
599         released first (i.e., "free"d) before the exception is actually
600         raised.
601
602       • "$vector = Bit::Vector->new_Bin($bits,$string);"
603
604         This method is an alternative constructor which allows you to create
605         a new bit vector object (with "$bits" bits) and to initialize it all
606         in one go.
607
608         The method internally first calls the bit vector constructor method
609         ""new()"" and then passes the given string to the method
610         ""from_Bin()"".
611
612         However, this method is more efficient than performing these two
613         steps separately: First because in this method, the memory area
614         occupied by the new bit vector is not initialized to zeros (which is
615         pointless in this case), and second because it saves you from the
616         associated overhead of one additional method invocation.
617
618         An exception will be raised if the necessary memory cannot be
619         allocated (see the description of the method ""new()"" above for
620         possible causes) or if the given string cannot be converted
621         successfully (see the description of the method ""from_Bin()""
622         further below for details).
623
624         In the latter case, the memory occupied by the new bit vector is
625         released first (i.e., "free"d) before the exception is actually
626         raised.
627
628       • "$vector = Bit::Vector->new_Dec($bits,$string);"
629
630         This method is an alternative constructor which allows you to create
631         a new bit vector object (with "$bits" bits) and to initialize it all
632         in one go.
633
634         The method internally first calls the bit vector constructor method
635         ""new()"" and then passes the given string to the method
636         ""from_Dec()"".
637
638         However, this method is more efficient than performing these two
639         steps separately: First because in this method, ""new()"" does not
640         initialize the memory area occupied by the new bit vector with zeros
641         (which is pointless in this case, because ""from_Dec()"" will do it
642         anyway), and second because it saves you from the associated overhead
643         of one additional method invocation.
644
645         An exception will be raised if the necessary memory cannot be
646         allocated (see the description of the method ""new()"" above for
647         possible causes) or if the given string cannot be converted
648         successfully (see the description of the method ""from_Dec()""
649         further below for details).
650
651         In the latter case, the memory occupied by the new bit vector is
652         released first (i.e., "free"d) before the exception is actually
653         raised.
654
655       • "$vector = Bit::Vector->new_Enum($bits,$string);"
656
657         This method is an alternative constructor which allows you to create
658         a new bit vector object (with "$bits" bits) and to initialize it all
659         in one go.
660
661         The method internally first calls the bit vector constructor method
662         ""new()"" and then passes the given string to the method
663         ""from_Enum()"".
664
665         However, this method is more efficient than performing these two
666         steps separately: First because in this method, ""new()"" does not
667         initialize the memory area occupied by the new bit vector with zeros
668         (which is pointless in this case, because ""from_Enum()"" will do it
669         anyway), and second because it saves you from the associated overhead
670         of one additional method invocation.
671
672         An exception will be raised if the necessary memory cannot be
673         allocated (see the description of the method ""new()"" above for
674         possible causes) or if the given string cannot be converted
675         successfully (see the description of the method ""from_Enum()""
676         further below for details).
677
678         In the latter case, the memory occupied by the new bit vector is
679         released first (i.e., "free"d) before the exception is actually
680         raised.
681
682       • "$vector = Bit::Vector->Concat_List(@vectors);"
683
684         This method creates a new vector containing all bit vectors from the
685         argument list in concatenated form.
686
687         The argument list may contain any number of arguments (including
688         zero); the only condition is that all arguments must be bit vectors.
689
690         There is no condition concerning the length (in number of bits) of
691         these arguments.
692
693         The vectors from the argument list are not changed in any way.
694
695         If the argument list is empty or if all arguments have length zero,
696         the resulting bit vector will also have length zero.
697
698         Note that the RIGHTMOST bit vector from the argument list will become
699         the LEAST significant part of the resulting bit vector, and the
700         LEFTMOST bit vector from the argument list will become the MOST
701         significant part of the resulting bit vector.
702
703   OBJECT METHODS
704       • "$vec2 = $vec1->new($bits);"
705
706         "@veclist = $vec->new($bits);"
707
708         This is an alternative way of calling the bit vector constructor
709         method.
710
711         Vector "$vec1" (or "$vec") is not affected by this, it just serves as
712         an anchor for the method invocation mechanism.
713
714         In fact ALL class methods in this module can be called this way, even
715         though this is probably considered to be "politically incorrect" by
716         OO ("object-orientation") aficionados. ;-)
717
718         So even if you are too lazy to type ""Bit::Vector->"" instead of
719         ""$vec1->"" (and even though laziness is - allegedly - a programmer's
720         virtue ":-)"), maybe it is better not to use this feature if you
721         don't want to get booed at. ;-)
722
723       • "$vec2 = $vec1->Shadow();"
724
725         Creates a NEW bit vector "$vec2" of the SAME SIZE as "$vec1" but
726         which is EMPTY.
727
728         Just like a shadow that has the same shape as the object it
729         originates from, but is flat and has no volume, i.e., contains
730         nothing.
731
732       • "$vec2 = $vec1->Clone();"
733
734         Creates a NEW bit vector "$vec2" of the SAME SIZE as "$vec1" which is
735         an EXACT COPY of "$vec1".
736
737       • "$vector = $vec1->Concat($vec2);"
738
739         This method returns a new bit vector object which is the result of
740         the concatenation of the contents of "$vec1" and "$vec2".
741
742         Note that the contents of "$vec1" become the MOST significant part of
743         the resulting bit vector, and "$vec2" the LEAST significant part.
744
745         If both bit vector arguments have length zero, the resulting bit
746         vector will also have length zero.
747
748       • "$vector = $vec1->Concat_List($vec2,$vec3,...);"
749
750         This is an alternative way of calling this (class) method as an
751         object method.
752
753         The method returns a new bit vector object which is the result of the
754         concatenation of the contents of "$vec1 . $vec2 . $vec3 . ..."
755
756         See the section "class methods" above for a detailed description of
757         this method.
758
759         Note that the argument list may be empty and that all arguments must
760         be bit vectors if it isn't.
761
762       • "$bits = $vector->Size();"
763
764         Returns the size (number of bits) the given vector was created with
765         (or ""Resize()""d to).
766
767       • "$vector->Resize($bits);"
768
769         Changes the size of the given vector to the specified number of bits.
770
771         This method allows you to change the size of an existing bit vector,
772         preserving as many bits from the old vector as will fit into the new
773         one (i.e., all bits with indices smaller than the minimum of the
774         sizes of both vectors, old and new).
775
776         If the number of machine words needed to store the new vector is
777         smaller than or equal to the number of words needed to store the old
778         vector, the memory allocated for the old vector is reused for the new
779         one, and only the relevant book-keeping information is adjusted
780         accordingly.
781
782         This means that even if the number of bits increases, new memory is
783         not necessarily being allocated (i.e., if the old and the new number
784         of bits fit into the same number of machine words).
785
786         If the number of machine words needed to store the new vector is
787         greater than the number of words needed to store the old vector, new
788         memory is allocated for the new vector, the old vector is copied to
789         the new one, the remaining bits in the new vector are cleared (turned
790         off) and the old vector is deleted, i.e., the memory that was
791         allocated for it is released.
792
793         (An exception will be raised if the method is unable to allocate the
794         necessary memory for the new vector.)
795
796         As a consequence, if you decrease the size of a given vector so that
797         it will use fewer machine words, and increase it again later so that
798         it will use more words than immediately before but still less than
799         the original vector, new memory will be allocated anyway because the
800         information about the size of the original vector is lost whenever
801         you resize it.
802
803         Note also that if you specify a negative number for "$bits" it will
804         be interpreted as a large positive number due to its internal two's
805         complement binary representation.
806
807         In such a case, "Resize()" will obediently attempt to create a bit
808         vector of that size, probably resulting in an exception, as explained
809         above.
810
811         Finally, note that - in contrast to previous versions - resizing a
812         bit vector to a size of zero bits (length zero) is now permitted.
813
814       • "$vec2->Copy($vec1);"
815
816         Copies the contents of bit vector "$vec1" to bit vector "$vec2".
817
818         The previous contents of bit vector "$vec2" get overwritten, i.e.,
819         are lost.
820
821         Both vectors must exist beforehand, i.e., this method does not CREATE
822         any new bit vector object.
823
824         The two vectors may be of any size.
825
826         If the source bit vector is larger than the target, this method will
827         copy as much of the least significant bits of the source vector as
828         will fit into the target vector, thereby discarding any extraneous
829         most significant bits.
830
831         BEWARE that this causes a brutal cutoff in the middle of your data,
832         and it will also leave you with an almost unpredictable sign if
833         subsequently the number in the target vector is going to be
834         interpreted as a number! (You have been warned!)
835
836         If the target bit vector is larger than the source, this method fills
837         up the remaining most significant bits in the target bit vector with
838         either 0's or 1's, depending on the sign (= the most significant bit)
839         of the source bit vector. This is also known as "sign extension".
840
841         This makes it possible to copy numbers from a smaller bit vector into
842         a larger one while preserving the number's absolute value as well as
843         its sign (due to the two's complement binary representation of
844         numbers).
845
846       • "$vector->Empty();"
847
848         Clears all bits in the given vector.
849
850       • "$vector->Fill();"
851
852         Sets all bits in the given vector.
853
854       • "$vector->Flip();"
855
856         Flips (i.e., complements) all bits in the given vector.
857
858       • "$vector->Primes();"
859
860         Clears the given bit vector and sets all bits whose indices are prime
861         numbers.
862
863         This method uses the algorithm known as the "Sieve of Erathostenes"
864         internally.
865
866       • "$vec2->Reverse($vec1);"
867
868         This method copies the given vector "$vec1" to the vector "$vec2",
869         thereby reversing the order of all bits.
870
871         I.e., the least significant bit of "$vec1" becomes the most
872         significant bit of "$vec2", whereas the most significant bit of
873         "$vec1" becomes the least significant bit of "$vec2", and so forth
874         for all bits in between.
875
876         Note that in-place processing is also possible, i.e., "$vec1" and
877         "$vec2" may be identical.
878
879         (Internally, this is the same as
880         "$vec1->Interval_Reverse(0,$vec1->Size()-1);".)
881
882       • "$vector->Interval_Empty($min,$max);"
883
884         Clears all bits in the interval "[$min..$max]" (including both
885         limits) in the given vector.
886
887         "$min" and "$max" may have the same value; this is the same as
888         clearing a single bit with ""Bit_Off()"" (but less efficient).
889
890         Note that "$vector->Interval_Empty(0,$vector->Size()-1);" is the same
891         as "$vector->Empty();" (but less efficient).
892
893       • "$vector->Interval_Fill($min,$max);"
894
895         Sets all bits in the interval "[$min..$max]" (including both limits)
896         in the given vector.
897
898         "$min" and "$max" may have the same value; this is the same as
899         setting a single bit with ""Bit_On()"" (but less efficient).
900
901         Note that "$vector->Interval_Fill(0,$vector->Size()-1);" is the same
902         as "$vector->Fill();" (but less efficient).
903
904       • "$vector->Interval_Flip($min,$max);"
905
906         Flips (i.e., complements) all bits in the interval "[$min..$max]"
907         (including both limits) in the given vector.
908
909         "$min" and "$max" may have the same value; this is the same as
910         flipping a single bit with ""bit_flip()"" (but less efficient).
911
912         Note that "$vector->Interval_Flip(0,$vector->Size()-1);" is the same
913         as "$vector->Flip();" and "$vector->Complement($vector);" (but less
914         efficient).
915
916       • "$vector->Interval_Reverse($min,$max);"
917
918         Reverses the order of all bits in the interval "[$min..$max]"
919         (including both limits) in the given vector.
920
921         I.e., bits "$min" and "$max" swap places, and so forth for all bits
922         in between.
923
924         "$min" and "$max" may have the same value; this has no effect
925         whatsoever, though.
926
927       • "if (($min,$max) = $vector->Interval_Scan_inc($start))"
928
929         Returns the minimum and maximum indices of the next contiguous block
930         of set bits (i.e., bits in the "on" state).
931
932         The search starts at index "$start" (i.e., "$min" >= "$start") and
933         proceeds upwards (i.e., "$max" >= "$min"), thus repeatedly increments
934         the search pointer "$start" (internally).
935
936         Note though that the contents of the variable (or scalar literal
937         value) "$start" is NOT altered. I.e., you have to set it to the
938         desired value yourself prior to each call to ""Interval_Scan_inc()""
939         (see also the example given below).
940
941         Actually, the bit vector is not searched bit by bit, but one machine
942         word at a time, in order to speed up execution (which means that this
943         method is quite efficient).
944
945         An empty list is returned if no such block can be found.
946
947         Note that a single set bit (surrounded by cleared bits) is a valid
948         block by this definition. In that case the return values for "$min"
949         and "$max" are the same.
950
951         Typical use:
952
953             $start = 0;
954             while (($start < $vector->Size()) &&
955                 (($min,$max) = $vector->Interval_Scan_inc($start)))
956             {
957                 $start = $max + 2;
958
959                 # do something with $min and $max
960             }
961
962       • "if (($min,$max) = $vector->Interval_Scan_dec($start))"
963
964         Returns the minimum and maximum indices of the next contiguous block
965         of set bits (i.e., bits in the "on" state).
966
967         The search starts at index "$start" (i.e., "$max" <= "$start") and
968         proceeds downwards (i.e., "$min" <= "$max"), thus repeatedly
969         decrements the search pointer "$start" (internally).
970
971         Note though that the contents of the variable (or scalar literal
972         value) "$start" is NOT altered. I.e., you have to set it to the
973         desired value yourself prior to each call to ""Interval_Scan_dec()""
974         (see also the example given below).
975
976         Actually, the bit vector is not searched bit by bit, but one machine
977         word at a time, in order to speed up execution (which means that this
978         method is quite efficient).
979
980         An empty list is returned if no such block can be found.
981
982         Note that a single set bit (surrounded by cleared bits) is a valid
983         block by this definition. In that case the return values for "$min"
984         and "$max" are the same.
985
986         Typical use:
987
988             $start = $vector->Size() - 1;
989             while (($start >= 0) &&
990                 (($min,$max) = $vector->Interval_Scan_dec($start)))
991             {
992                 $start = $min - 2;
993
994                 # do something with $min and $max
995             }
996
997       • "$vec2->Interval_Copy($vec1,$offset2,$offset1,$length);"
998
999         This method allows you to copy a stretch of contiguous bits (starting
1000         at any position "$offset1" you choose, with a length of "$length"
1001         bits) from a given "source" bit vector "$vec1" to another position
1002         "$offset2" in a "target" bit vector "$vec2".
1003
1004         Note that the two bit vectors "$vec1" and "$vec2" do NOT need to have
1005         the same (matching) size!
1006
1007         Consequently, any of the two terms ""$offset1 + $length"" and
1008         ""$offset2 + $length"" (or both) may exceed the actual length of its
1009         corresponding bit vector (""$vec1->Size()"" and ""$vec2->Size()"",
1010         respectively).
1011
1012         In such a case, the "$length" parameter is automatically reduced
1013         internally so that both terms above are bounded by the number of bits
1014         of their corresponding bit vector.
1015
1016         This may even result in a length of zero, in which case nothing is
1017         copied at all.
1018
1019         (Of course the value of the "$length" parameter, supplied by you in
1020         the initial method call, may also be zero right from the start!)
1021
1022         Note also that "$offset1" and "$offset2" must lie within the range
1023         "0" and, respectively, ""$vec1->Size()-1"" or ""$vec2->Size()-1"", or
1024         a fatal "offset out of range" error will occur.
1025
1026         Note further that "$vec1" and "$vec2" may be identical, i.e., you may
1027         copy a stretch of contiguous bits from one part of a given bit vector
1028         to another part.
1029
1030         The source and the target interval may even overlap, in which case
1031         the copying is automatically performed in ascending or descending
1032         order (depending on the direction of the copy - downwards or upwards
1033         in the bit vector, respectively) to handle this situation correctly,
1034         i.e., so that no bits are being overwritten before they have been
1035         copied themselves.
1036
1037       • "$vec2->Interval_Substitute($vec1,$off2,$len2,$off1,$len1);"
1038
1039         This method is (roughly) the same for bit vectors (i.e., arrays of
1040         booleans) as what the "splice" function in Perl is for lists (i.e.,
1041         arrays of scalars).
1042
1043         (See "splice" in perlfunc for more details about this function.)
1044
1045         The method allows you to substitute a stretch of contiguous bits
1046         (defined by a position (offset) "$off1" and a length of "$len1" bits)
1047         from a given "source" bit vector "$vec1" for a different stretch of
1048         contiguous bits (defined by a position (offset) "$off2" and a length
1049         of "$len2" bits) in another, "target" bit vector "$vec2".
1050
1051         Note that the two bit vectors "$vec1" and "$vec2" do NOT need to have
1052         the same (matching) size!
1053
1054         Note further that "$off1" and "$off2" must lie within the range "0"
1055         and, respectively, ""$vec1->Size()"" or ""$vec2->Size()"", or a fatal
1056         "offset out of range" error will occur.
1057
1058         Alert readers will have noticed that these upper limits are NOT
1059         ""$vec1->Size()-1"" and ""$vec2->Size()-1"", as they would be for any
1060         other method in this module, but that these offsets may actually
1061         point to one position PAST THE END of the corresponding bit vector.
1062
1063         This is necessary in order to make it possible to APPEND a given
1064         stretch of bits to the target bit vector instead of REPLACING
1065         something in it.
1066
1067         For reasons of symmetry and generality, the same applies to the
1068         offset in the source bit vector, even though such an offset (one
1069         position past the end of the bit vector) does not serve any practical
1070         purpose there (but does not cause any harm either).
1071
1072         (Actually this saves you from the need of testing for this special
1073         case, in certain circumstances.)
1074
1075         Note that whenever the term ""$off1 + $len1"" exceeds the size
1076         ""$vec1->Size()"" of bit vector "$vec1" (or if ""$off2 + $len2""
1077         exceeds ""$vec2->Size()""), the corresponding length ("$len1" or
1078         "$len2", respectively) is automatically reduced internally so that
1079         ""$off1 + $len1 <= $vec1->Size()"" (and ""$off2 + $len2 <=
1080         $vec2->Size()"") holds.
1081
1082         (Note that this does NOT alter the intended result, even though this
1083         may seem counter-intuitive at first!)
1084
1085         This may even result in a length ("$len1" or "$len2") of zero.
1086
1087         A length of zero for the interval in the SOURCE bit vector (""$len1
1088         == 0"") means that the indicated stretch of bits in the target bit
1089         vector (starting at position "$off2") is to be replaced by NOTHING,
1090         i.e., is to be DELETED.
1091
1092         A length of zero for the interval in the TARGET bit vector ("$len2 ==
1093         0") means that NOTHING is replaced, and that the stretch of bits from
1094         the source bit vector is simply INSERTED into the target bit vector
1095         at the indicated position ("$off2").
1096
1097         If both length parameters are zero, nothing is done at all.
1098
1099         Note that in contrast to any other method in this module (especially
1100         ""Interval_Copy()"", ""Insert()"" and ""Delete()""), this method
1101         IMPLICITLY and AUTOMATICALLY adapts the length of the resulting bit
1102         vector as needed, as given by
1103
1104                 $size = $vec2->Size();   #  before
1105                 $size += $len1 - $len2;  #  after
1106
1107         (The only other method in this module that changes the size of a bit
1108         vector is the method ""Resize()"".)
1109
1110         In other words, replacing a given interval of bits in the target bit
1111         vector with a longer or shorter stretch of bits from the source bit
1112         vector, or simply inserting (""$len2 == 0"") a stretch of bits into
1113         or deleting (""$len1 == 0"") an interval of bits from the target bit
1114         vector will automatically increase or decrease, respectively, the
1115         size of the target bit vector accordingly.
1116
1117         For the sake of generality, this may even result in a bit vector with
1118         a size of zero (containing no bits at all).
1119
1120         This is also the reason why bit vectors of length zero are permitted
1121         in this module in the first place, starting with version 5.0.
1122
1123         Finally, note that "$vec1" and "$vec2" may be identical, i.e., in-
1124         place processing is possible.
1125
1126         (If you think about that for a while or if you look at the code, you
1127         will see that this is far from trivial!)
1128
1129       • "if ($vector->is_empty())"
1130
1131         Tests whether the given bit vector is empty, i.e., whether ALL of its
1132         bits are cleared (in the "off" state).
1133
1134         In "big integer" arithmetic, this is equivalent to testing whether
1135         the number stored in the bit vector is zero ("0").
1136
1137         Returns "true" ("1") if the bit vector is empty and "false" ("0")
1138         otherwise.
1139
1140         Note that this method also returns "true" ("1") if the given bit
1141         vector has a length of zero, i.e., if it contains no bits at all.
1142
1143       • "if ($vector->is_full())"
1144
1145         Tests whether the given bit vector is full, i.e., whether ALL of its
1146         bits are set (in the "on" state).
1147
1148         In "big integer" arithmetic, this is equivalent to testing whether
1149         the number stored in the bit vector is minus one ("-1").
1150
1151         Returns "true" ("1") if the bit vector is full and "false" ("0")
1152         otherwise.
1153
1154         If the given bit vector has a length of zero (i.e., if it contains no
1155         bits at all), this method returns "false" ("0").
1156
1157       • "if ($vec1->equal($vec2))"
1158
1159         Tests the two given bit vectors for equality.
1160
1161         Returns "true" ("1") if the two bit vectors are exact copies of one
1162         another and "false" ("0") otherwise.
1163
1164       • "$cmp = $vec1->Lexicompare($vec2);"
1165
1166         Compares the two given bit vectors, which are regarded as UNSIGNED
1167         numbers in binary representation.
1168
1169         The method returns ""-1"" if the first bit vector is smaller than the
1170         second bit vector, "0" if the two bit vectors are exact copies of one
1171         another and "1" if the first bit vector is greater than the second
1172         bit vector.
1173
1174       • "$cmp = $vec1->Compare($vec2);"
1175
1176         Compares the two given bit vectors, which are regarded as SIGNED
1177         numbers in binary representation.
1178
1179         The method returns ""-1"" if the first bit vector is smaller than the
1180         second bit vector, "0" if the two bit vectors are exact copies of one
1181         another and "1" if the first bit vector is greater than the second
1182         bit vector.
1183
1184       • "$string = $vector->to_Hex();"
1185
1186         Returns a hexadecimal string representing the given bit vector.
1187
1188         Note that this representation is quite compact, in that it only needs
1189         at most twice the number of bytes needed to store the bit vector
1190         itself, internally.
1191
1192         Note also that since a hexadecimal digit is always worth four bits,
1193         the length of the resulting string is always a multiple of four bits,
1194         regardless of the true length (in bits) of the given bit vector.
1195
1196         Finally, note that the LEAST significant hexadecimal digit is located
1197         at the RIGHT end of the resulting string, and the MOST significant
1198         digit at the LEFT end.
1199
1200       • "$vector->from_Hex($string);"
1201
1202         Allows to read in the contents of a bit vector from a hexadecimal
1203         string, such as returned by the method ""to_Hex()"" (see above).
1204
1205         Remember that the least significant bits are always to the right of a
1206         hexadecimal string, and the most significant bits to the left.
1207         Therefore, the string is actually read in from right to left while
1208         the bit vector is filled accordingly, 4 bits at a time, starting with
1209         the least significant bits and going upward to the most significant
1210         bits.
1211
1212         If the given string contains less hexadecimal digits than are needed
1213         to completely fill the given bit vector, the remaining (most
1214         significant) bits are all cleared.
1215
1216         This also means that, even if the given string does not contain
1217         enough digits to completely fill the given bit vector, the previous
1218         contents of the bit vector are erased completely.
1219
1220         If the given string is longer than it needs to fill the given bit
1221         vector, the superfluous characters are simply ignored.
1222
1223         (In fact they are ignored completely - they are not even checked for
1224         proper syntax. See also below for more about that.)
1225
1226         This behaviour is intentional so that you may read in the string
1227         representing one bit vector into another bit vector of different
1228         size, i.e., as much of it as will fit.
1229
1230         If during the process of reading the given string any character is
1231         encountered which is not a hexadecimal digit, a fatal syntax error
1232         ensues ("input string syntax error").
1233
1234       • "$string = $vector->to_Bin();"
1235
1236         Returns a binary string representing the given bit vector.
1237
1238         Example:
1239
1240           $vector = Bit::Vector->new(8);
1241           $vector->Primes();
1242           $string = $vector->to_Bin();
1243           print "'$string'\n";
1244
1245         This prints:
1246
1247           '10101100'
1248
1249         (Bits #7, #5, #3 and #2 are set.)
1250
1251         Note that the LEAST significant bit is located at the RIGHT end of
1252         the resulting string, and the MOST significant bit at the LEFT end.
1253
1254       • "$vector->from_Bin($string);"
1255
1256         This method allows you to read in the contents of a bit vector from a
1257         binary string, such as returned by the method ""to_Bin()"" (see
1258         above).
1259
1260         Note that this method assumes that the LEAST significant bit is
1261         located at the RIGHT end of the binary string, and the MOST
1262         significant bit at the LEFT end. Therefore, the string is actually
1263         read in from right to left while the bit vector is filled
1264         accordingly, one bit at a time, starting with the least significant
1265         bit and going upward to the most significant bit.
1266
1267         If the given string contains less binary digits ("0" and "1") than
1268         are needed to completely fill the given bit vector, the remaining
1269         (most significant) bits are all cleared.
1270
1271         This also means that, even if the given string does not contain
1272         enough digits to completely fill the given bit vector, the previous
1273         contents of the bit vector are erased completely.
1274
1275         If the given string is longer than it needs to fill the given bit
1276         vector, the superfluous characters are simply ignored.
1277
1278         (In fact they are ignored completely - they are not even checked for
1279         proper syntax. See also below for more about that.)
1280
1281         This behaviour is intentional so that you may read in the string
1282         representing one bit vector into another bit vector of different
1283         size, i.e., as much of it as will fit.
1284
1285         If during the process of reading the given string any character is
1286         encountered which is not either "0" or "1", a fatal syntax error
1287         ensues ("input string syntax error").
1288
1289       • "$string = $vector->to_Dec();"
1290
1291         This method returns a string representing the contents of the given
1292         bit vector converted to decimal (base 10).
1293
1294         Note that this method assumes the given bit vector to be SIGNED (and
1295         to contain a number in two's complement binary representation).
1296
1297         Consequently, whenever the most significant bit of the given bit
1298         vector is set, the number stored in it is regarded as being NEGATIVE.
1299
1300         The resulting string can be fed into ""from_Dec()"" (see below) in
1301         order to copy the contents of this bit vector to another one (or to
1302         restore the contents of this one). This is not advisable, though,
1303         since this would be very inefficient (there are much more efficient
1304         methods for storing and copying bit vectors in this module).
1305
1306         Note that such conversion from binary to decimal is inherently slow
1307         since the bit vector has to be repeatedly divided by 10 with
1308         remainder until the quotient becomes 0 (each remainder in turn
1309         represents a single decimal digit of the resulting string).
1310
1311         This is also true for the implementation of this method in this
1312         module, even though a considerable effort has been made to speed it
1313         up: instead of repeatedly dividing by 10, the bit vector is
1314         repeatedly divided by the largest power of 10 that will fit into a
1315         machine word. The remainder is then repeatedly divided by 10 using
1316         only machine word arithmetics, which is much faster than dividing the
1317         whole bit vector ("divide and rule" principle).
1318
1319         According to my own measurements, this resulted in an 8-fold speed
1320         increase over the straightforward approach.
1321
1322         Still, conversion to decimal should be used only where absolutely
1323         necessary.
1324
1325         Keep the resulting string stored in some variable if you need it
1326         again, instead of converting the bit vector all over again.
1327
1328         Beware that if you set the configuration for overloaded operators to
1329         "output=decimal", this method will be called for every bit vector
1330         enclosed in double quotes!
1331
1332       • "$vector->from_Dec($string);"
1333
1334         This method allows you to convert a given decimal number, which may
1335         be positive or negative, into two's complement binary representation,
1336         which is then stored in the given bit vector.
1337
1338         The decimal number should always be provided as a string, to avoid
1339         possible truncation (due to the limited precision of integers in
1340         Perl) or formatting (due to Perl's use of scientific notation for
1341         large numbers), which would lead to errors.
1342
1343         If the binary representation of the given decimal number is too big
1344         to fit into the given bit vector (if the given bit vector does not
1345         contain enough bits to hold it), a fatal "numeric overflow error"
1346         occurs.
1347
1348         If the input string contains other characters than decimal digits
1349         ("0-9") and an optional leading sign (""+"" or ""-""), a fatal "input
1350         string syntax error" occurs.
1351
1352         Beware that large positive numbers which cause the most significant
1353         bit to be set (e.g. "255" in a bit vector with 8 bits) will be
1354         printed as negative numbers when converted back to decimal using the
1355         method "to_Dec()" (e.g.  "-1", in our example), because numbers with
1356         the most significant bit set are considered to be negative in two's
1357         complement binary representation.
1358
1359         Note also that while it is possible to thusly enter negative numbers
1360         as large positive numbers (e.g. "255" for "-1" in a bit vector with 8
1361         bits), the contrary isn't, i.e., you cannot enter "-255" for "+1", in
1362         our example.  A fatal "numeric overflow error" will occur if you try
1363         to do so.
1364
1365         If possible program abortion is unwanted or intolerable, use
1366         ""eval"", like this:
1367
1368           eval { $vector->from_Dec("1152921504606846976"); };
1369           if ($@)
1370           {
1371               # an error occurred
1372           }
1373
1374         There are four possible error messages:
1375
1376           if ($@ =~ /item is not a string/)
1377
1378           if ($@ =~ /input string syntax error/)
1379
1380           if ($@ =~ /numeric overflow error/)
1381
1382           if ($@ =~ /unable to allocate memory/)
1383
1384         Note that the conversion from decimal to binary is costly in terms of
1385         processing time, since a lot of multiplications have to be carried
1386         out (in principle, each decimal digit must be multiplied with the
1387         binary representation of the power of 10 corresponding to its
1388         position in the decimal number, i.e., 1, 10, 100, 1000, 10000 and so
1389         on).
1390
1391         This is not as time consuming as the opposite conversion, from binary
1392         to decimal (where successive divisions have to be carried out, which
1393         are even more expensive than multiplications), but still noticeable.
1394
1395         Again (as in the case of ""to_Dec()""), the implementation of this
1396         method in this module uses the principle of "divide and rule" in
1397         order to speed up the conversion, i.e., as many decimal digits as
1398         possible are first accumulated (converted) in a machine word and only
1399         then stored in the given bit vector.
1400
1401         Even so, use this method only where absolutely necessary if speed is
1402         an important consideration in your application.
1403
1404         Beware that if you set the configuration for overloaded operators to
1405         "input=decimal", this method will be called for every scalar operand
1406         you use!
1407
1408       • "$string = $vector->to_Enum();"
1409
1410         Converts the given bit vector or set into an enumeration of single
1411         indices and ranges of indices (".newsrc" style), representing the
1412         bits that are set ("1") in the bit vector.
1413
1414         Example:
1415
1416           $vector = Bit::Vector->new(20);
1417           $vector->Bit_On(2);
1418           $vector->Bit_On(3);
1419           $vector->Bit_On(11);
1420           $vector->Interval_Fill(5,7);
1421           $vector->Interval_Fill(13,19);
1422           print "'", $vector->to_Enum(), "'\n";
1423
1424         which prints
1425
1426           '2,3,5-7,11,13-19'
1427
1428         If the given bit vector is empty, the resulting string will also be
1429         empty.
1430
1431         Note, by the way, that the above example can also be written a little
1432         handier, perhaps, as follows:
1433
1434           Bit::Vector->Configuration("out=enum");
1435           $vector = Bit::Vector->new(20);
1436           $vector->Index_List_Store(2,3,5,6,7,11,13,14,15,16,17,18,19);
1437           print "'$vector'\n";
1438
1439       • "$vector->from_Enum($string);"
1440
1441         This method first empties the given bit vector and then tries to set
1442         the bits and ranges of bits specified in the given string.
1443
1444         The string "$string" must only contain unsigned integers or ranges of
1445         integers (two unsigned integers separated by a dash "-"), separated
1446         by commas (",").
1447
1448         All other characters are disallowed (including white space!)  and
1449         will lead to a fatal "input string syntax error".
1450
1451         In each range, the first integer (the lower limit of the range) must
1452         always be less than or equal to the second integer (the upper limit),
1453         or a fatal "minimum > maximum index" error occurs.
1454
1455         All integers must lie in the permitted range for the given bit
1456         vector, i.e., they must lie between "0" and ""$vector->Size()-1"".
1457
1458         If this condition is not met, a fatal "index out of range" error
1459         occurs.
1460
1461         If possible program abortion is unwanted or intolerable, use
1462         ""eval"", like this:
1463
1464           eval { $vector->from_Enum("2,3,5-7,11,13-19"); };
1465           if ($@)
1466           {
1467               # an error occurred
1468           }
1469
1470         There are four possible error messages:
1471
1472           if ($@ =~ /item is not a string/)
1473
1474           if ($@ =~ /input string syntax error/)
1475
1476           if ($@ =~ /index out of range/)
1477
1478           if ($@ =~ /minimum > maximum index/)
1479
1480         Note that the order of the indices and ranges is irrelevant, i.e.,
1481
1482           eval { $vector->from_Enum("11,5-7,3,13-19,2"); };
1483
1484         results in the same vector as in the example above.
1485
1486         Ranges and indices may also overlap.
1487
1488         This is because each (single) index in the string is passed to the
1489         method ""Bit_On()"", internally, and each range to the method
1490         ""Interval_Fill()"".
1491
1492         This means that the resulting bit vector is just the union of all the
1493         indices and ranges specified in the given string.
1494
1495       • "$vector->Bit_Off($index);"
1496
1497         Clears the bit with index "$index" in the given vector.
1498
1499       • "$vector->Bit_On($index);"
1500
1501         Sets the bit with index "$index" in the given vector.
1502
1503       • "$vector->bit_flip($index)"
1504
1505         Flips (i.e., complements) the bit with index "$index" in the given
1506         vector.
1507
1508         Moreover, this method returns the NEW state of the bit in question,
1509         i.e., it returns "0" if the bit is cleared or "1" if the bit is set
1510         (AFTER flipping it).
1511
1512       • "if ($vector->bit_test($index))"
1513
1514         "if ($vector->contains($index))"
1515
1516         Returns the current state of the bit with index "$index" in the given
1517         vector, i.e., returns "0" if it is cleared (in the "off" state) or
1518         "1" if it is set (in the "on" state).
1519
1520       • "$vector->Bit_Copy($index,$bit);"
1521
1522         Sets the bit with index "$index" in the given vector either to "0" or
1523         "1" depending on the boolean value "$bit".
1524
1525       • "$vector->LSB($bit);"
1526
1527         Allows you to set the least significant bit in the given bit vector
1528         to the value given by the boolean parameter "$bit".
1529
1530         This is a (faster) shortcut for ""$vector->Bit_Copy(0,$bit);"".
1531
1532       • "$vector->MSB($bit);"
1533
1534         Allows you to set the most significant bit in the given bit vector to
1535         the value given by the boolean parameter "$bit".
1536
1537         This is a (faster) shortcut for
1538         ""$vector->Bit_Copy($vector->Size()-1,$bit);"".
1539
1540       • "$bit = $vector->lsb();"
1541
1542         Returns the least significant bit of the given bit vector.
1543
1544         This is a (faster) shortcut for ""$bit = $vector->bit_test(0);"".
1545
1546       • "$bit = $vector->msb();"
1547
1548         Returns the most significant bit of the given bit vector.
1549
1550         This is a (faster) shortcut for ""$bit =
1551         $vector->bit_test($vector->Size()-1);"".
1552
1553       • "$carry_out = $vector->rotate_left();"
1554
1555           carry             MSB           vector:           LSB
1556            out:
1557           +---+            +---+---+---+---     ---+---+---+---+
1558           |   |  <---+---  |   |   |   |    ...    |   |   |   |  <---+
1559           +---+      |     +---+---+---+---     ---+---+---+---+      |
1560                      |                                                |
1561                      +------------------------------------------------+
1562
1563         The least significant bit (LSB) is the bit with index "0", the most
1564         significant bit (MSB) is the bit with index ""$vector->Size()-1"".
1565
1566       • "$carry_out = $vector->rotate_right();"
1567
1568                   MSB           vector:           LSB            carry
1569                                                                   out:
1570                  +---+---+---+---     ---+---+---+---+           +---+
1571           +--->  |   |   |   |    ...    |   |   |   |  ---+---> |   |
1572           |      +---+---+---+---     ---+---+---+---+     |     +---+
1573           |                                                |
1574           +------------------------------------------------+
1575
1576         The least significant bit (LSB) is the bit with index "0", the most
1577         significant bit (MSB) is the bit with index ""$vector->Size()-1"".
1578
1579       • "$carry_out = $vector->shift_left($carry_in);"
1580
1581           carry         MSB           vector:           LSB         carry
1582            out:                                                      in:
1583           +---+        +---+---+---+---     ---+---+---+---+        +---+
1584           |   |  <---  |   |   |   |    ...    |   |   |   |  <---  |   |
1585           +---+        +---+---+---+---     ---+---+---+---+        +---+
1586
1587         The least significant bit (LSB) is the bit with index "0", the most
1588         significant bit (MSB) is the bit with index ""$vector->Size()-1"".
1589
1590       • "$carry_out = $vector->shift_right($carry_in);"
1591
1592           carry         MSB           vector:           LSB         carry
1593            in:                                                       out:
1594           +---+        +---+---+---+---     ---+---+---+---+        +---+
1595           |   |  --->  |   |   |   |    ...    |   |   |   |  --->  |   |
1596           +---+        +---+---+---+---     ---+---+---+---+        +---+
1597
1598         The least significant bit (LSB) is the bit with index "0", the most
1599         significant bit (MSB) is the bit with index ""$vector->Size()-1"".
1600
1601       • "$vector->Move_Left($bits);"
1602
1603         Shifts the given bit vector left by "$bits" bits, i.e., inserts
1604         "$bits" new bits at the lower end (least significant bit) of the bit
1605         vector, moving all other bits up by "$bits" places, thereby losing
1606         the "$bits" most significant bits.
1607
1608         The inserted new bits are all cleared (set to the "off" state).
1609
1610         This method does nothing if "$bits" is equal to zero.
1611
1612         Beware that the whole bit vector is cleared WITHOUT WARNING if
1613         "$bits" is greater than or equal to the size of the given bit vector!
1614
1615         In fact this method is equivalent to
1616
1617           for ( $i = 0; $i < $bits; $i++ ) { $vector->shift_left(0); }
1618
1619         except that it is much more efficient (for "$bits" greater than or
1620         equal to the number of bits in a machine word on your system) than
1621         this straightforward approach.
1622
1623       • "$vector->Move_Right($bits);"
1624
1625         Shifts the given bit vector right by "$bits" bits, i.e., deletes the
1626         "$bits" least significant bits of the bit vector, moving all other
1627         bits down by "$bits" places, thereby creating "$bits" new bits at the
1628         upper end (most significant bit) of the bit vector.
1629
1630         These new bits are all cleared (set to the "off" state).
1631
1632         This method does nothing if "$bits" is equal to zero.
1633
1634         Beware that the whole bit vector is cleared WITHOUT WARNING if
1635         "$bits" is greater than or equal to the size of the given bit vector!
1636
1637         In fact this method is equivalent to
1638
1639           for ( $i = 0; $i < $bits; $i++ ) { $vector->shift_right(0); }
1640
1641         except that it is much more efficient (for "$bits" greater than or
1642         equal to the number of bits in a machine word on your system) than
1643         this straightforward approach.
1644
1645       • "$vector->Insert($offset,$bits);"
1646
1647         This method inserts "$bits" fresh new bits at position "$offset" in
1648         the given bit vector.
1649
1650         The "$bits" most significant bits are lost, and all bits starting
1651         with bit number "$offset" up to and including bit number
1652         ""$vector->Size()-$bits-1"" are moved up by "$bits" places.
1653
1654         The now vacant "$bits" bits starting at bit number "$offset" (up to
1655         and including bit number ""$offset+$bits-1"") are then set to zero
1656         (cleared).
1657
1658         Note that this method does NOT increase the size of the given bit
1659         vector, i.e., the bit vector is NOT extended at its upper end to
1660         "rescue" the "$bits" uppermost (most significant) bits - instead,
1661         these bits are lost forever.
1662
1663         If you don't want this to happen, you have to increase the size of
1664         the given bit vector EXPLICITLY and BEFORE you perform the "Insert"
1665         operation, with a statement such as the following:
1666
1667           $vector->Resize($vector->Size() + $bits);
1668
1669         Or use the method ""Interval_Substitute()"" instead of ""Insert()"",
1670         which performs automatic growing and shrinking of its target bit
1671         vector.
1672
1673         Note also that "$offset" must lie in the permitted range between "0"
1674         and ""$vector->Size()-1"", or a fatal "offset out of range" error
1675         will occur.
1676
1677         If the term ""$offset + $bits"" exceeds ""$vector->Size()-1"", all
1678         the bits starting with bit number "$offset" up to bit number
1679         ""$vector->Size()-1"" are simply cleared.
1680
1681       • "$vector->Delete($offset,$bits);"
1682
1683         This method deletes, i.e., removes the bits starting at position
1684         "$offset" up to and including bit number ""$offset+$bits-1"" from the
1685         given bit vector.
1686
1687         The remaining uppermost bits (starting at position ""$offset+$bits""
1688         up to and including bit number ""$vector->Size()-1"") are moved down
1689         by "$bits" places.
1690
1691         The now vacant uppermost (most significant) "$bits" bits are then set
1692         to zero (cleared).
1693
1694         Note that this method does NOT decrease the size of the given bit
1695         vector, i.e., the bit vector is NOT clipped at its upper end to "get
1696         rid of" the vacant "$bits" uppermost bits.
1697
1698         If you don't want this, i.e., if you want the bit vector to shrink
1699         accordingly, you have to do so EXPLICITLY and AFTER the "Delete"
1700         operation, with a couple of statements such as these:
1701
1702           $size = $vector->Size();
1703           if ($bits > $size) { $bits = $size; }
1704           $vector->Resize($size - $bits);
1705
1706         Or use the method ""Interval_Substitute()"" instead of ""Delete()"",
1707         which performs automatic growing and shrinking of its target bit
1708         vector.
1709
1710         Note also that "$offset" must lie in the permitted range between "0"
1711         and ""$vector->Size()-1"", or a fatal "offset out of range" error
1712         will occur.
1713
1714         If the term ""$offset + $bits"" exceeds ""$vector->Size()-1"", all
1715         the bits starting with bit number "$offset" up to bit number
1716         ""$vector->Size()-1"" are simply cleared.
1717
1718       • "$carry = $vector->increment();"
1719
1720         This method increments the given bit vector.
1721
1722         Note that this method regards bit vectors as being unsigned, i.e.,
1723         the largest possible positive number is directly followed by the
1724         smallest possible (or greatest possible, speaking in absolute terms)
1725         negative number:
1726
1727           before:  2 ^ (b-1) - 1    (= "0111...1111")
1728           after:   2 ^ (b-1)        (= "1000...0000")
1729
1730         where ""b"" is the number of bits of the given bit vector.
1731
1732         The method returns "false" ("0") in all cases except when a carry
1733         over occurs (in which case it returns "true", i.e., "1"), which
1734         happens when the number "1111...1111" is incremented, which gives
1735         "0000...0000" plus a carry over to the next higher (binary) digit.
1736
1737         This can be used for the terminating condition of a "while" loop, for
1738         instance, in order to cycle through all possible values the bit
1739         vector can assume.
1740
1741       • "$carry = $vector->decrement();"
1742
1743         This method decrements the given bit vector.
1744
1745         Note that this method regards bit vectors as being unsigned, i.e.,
1746         the smallest possible (or greatest possible, speaking in absolute
1747         terms) negative number is directly followed by the largest possible
1748         positive number:
1749
1750           before:  2 ^ (b-1)        (= "1000...0000")
1751           after:   2 ^ (b-1) - 1    (= "0111...1111")
1752
1753         where ""b"" is the number of bits of the given bit vector.
1754
1755         The method returns "false" ("0") in all cases except when a carry
1756         over occurs (in which case it returns "true", i.e., "1"), which
1757         happens when the number "0000...0000" is decremented, which gives
1758         "1111...1111" minus a carry over to the next higher (binary) digit.
1759
1760         This can be used for the terminating condition of a "while" loop, for
1761         instance, in order to cycle through all possible values the bit
1762         vector can assume.
1763
1764       • "$overflow = $vec2->inc($vec1);"
1765
1766         This method copies the contents of bit vector "$vec1" to bit vector
1767         "$vec2" and increments the copy (not the original).
1768
1769         If by incrementing the number its sign becomes invalid, the return
1770         value ("overflow" flag) will be true ("1"), or false ("0") if not.
1771         (See the description of the method "add()" below for a more in-depth
1772         explanation of what "overflow" means).
1773
1774         Note that in-place operation is also possible, i.e., "$vec1" and
1775         "$vec2" may be identical.
1776
1777       • "$overflow = $vec2->dec($vec1);"
1778
1779         This method copies the contents of bit vector "$vec1" to bit vector
1780         "$vec2" and decrements the copy (not the original).
1781
1782         If by decrementing the number its sign becomes invalid, the return
1783         value ("overflow" flag) will be true ("1"), or false ("0") if not.
1784         (See the description of the method "subtract()" below for a more in-
1785         depth explanation of what "overflow" means).
1786
1787         Note that in-place operation is also possible, i.e., "$vec1" and
1788         "$vec2" may be identical.
1789
1790       • "$carry = $vec3->add($vec1,$vec2,$carry);"
1791
1792         "($carry,$overflow) = $vec3->add($vec1,$vec2,$carry);"
1793
1794         This method adds the two numbers contained in bit vector "$vec1" and
1795         "$vec2" with carry "$carry" and stores the result in bit vector
1796         "$vec3".
1797
1798         I.e.,
1799                     $vec3 = $vec1 + $vec2 + $carry
1800
1801         Note that the "$carry" parameter is a boolean value, i.e., only its
1802         least significant bit is taken into account. (Think of it as though
1803         ""$carry &= 1;"" was always executed internally.)
1804
1805         In scalar context, the method returns a boolean value which indicates
1806         if a carry over (to the next higher bit position) has occured. In
1807         list context, the method returns the carry and the overflow flag (in
1808         this order).
1809
1810         The overflow flag is true ("1") if the sign (i.e., the most
1811         significant bit) of the result is wrong. This can happen when adding
1812         two very large positive numbers or when adding two (by their absolute
1813         value) very large negative numbers. See also further below.
1814
1815         The carry in- and output is needed mainly for cascading, i.e., to add
1816         numbers that are fragmented into several pieces.
1817
1818         Example:
1819
1820           # initialize
1821
1822           for ( $i = 0; $i < $n; $i++ )
1823           {
1824               $a[$i] = Bit::Vector->new($bits);
1825               $b[$i] = Bit::Vector->new($bits);
1826               $c[$i] = Bit::Vector->new($bits);
1827           }
1828
1829           # fill @a and @b
1830
1831           # $a[  0 ] is low order part,
1832           # $a[$n-1] is high order part,
1833           # and same for @b
1834
1835           # add
1836
1837           $carry = 0;
1838           for ( $i = 0; $i < $n; $i++ )
1839           {
1840               $carry = $c[$i]->add($a[$i],$b[$i],$carry);
1841           }
1842
1843         Note that it makes no difference to this method whether the numbers
1844         in "$vec1" and "$vec2" are unsigned or signed (i.e., in two's
1845         complement binary representation).
1846
1847         Note however that the return value (carry flag) is not meaningful
1848         when the numbers are SIGNED.
1849
1850         Moreover, when the numbers are signed, a special type of error can
1851         occur which is commonly called an "overflow error".
1852
1853         An overflow error occurs when the sign of the result (its most
1854         significant bit) is flipped (i.e., falsified) by a carry over from
1855         the next-lower bit position ("MSB-1").
1856
1857         In fact matters are a bit more complicated than that: the overflow
1858         flag is set to "true" whenever there is a carry over from bit
1859         position MSB-1 to the most significant bit (MSB) but no carry over
1860         from the MSB to the output carry flag, or vice-versa, i.e., when
1861         there is no carry over from bit position MSB-1 to the most
1862         significant bit (MSB) but a carry over to the output carry flag.
1863
1864         Thus the overflow flag is the result of an exclusive-or operation
1865         between incoming and outgoing carry over at the most significant bit
1866         position.
1867
1868       • "$carry = $vec3->subtract($vec1,$vec2,$carry);"
1869
1870         "($carry,$overflow) = $vec3->subtract($vec1,$vec2,$carry);"
1871
1872         This method subtracts the two numbers contained in bit vector "$vec1"
1873         and "$vec2" with carry "$carry" and stores the result in bit vector
1874         "$vec3".
1875
1876         I.e.,
1877                     $vec3 = $vec1 - $vec2 - $carry
1878
1879         Note that the "$carry" parameter is a boolean value, i.e., only its
1880         least significant bit is taken into account. (Think of it as though
1881         ""$carry &= 1;"" was always executed internally.)
1882
1883         In scalar context, the method returns a boolean value which indicates
1884         if a carry over (to the next higher bit position) has occured. In
1885         list context, the method returns the carry and the overflow flag (in
1886         this order).
1887
1888         The overflow flag is true ("1") if the sign (i.e., the most
1889         significant bit) of the result is wrong. This can happen when
1890         subtracting a very large negative number from a very large positive
1891         number or vice-versa. See also further below.
1892
1893         The carry in- and output is needed mainly for cascading, i.e., to
1894         subtract numbers that are fragmented into several pieces.
1895
1896         Example:
1897
1898           # initialize
1899
1900           for ( $i = 0; $i < $n; $i++ )
1901           {
1902               $a[$i] = Bit::Vector->new($bits);
1903               $b[$i] = Bit::Vector->new($bits);
1904               $c[$i] = Bit::Vector->new($bits);
1905           }
1906
1907           # fill @a and @b
1908
1909           # $a[  0 ] is low order part,
1910           # $a[$n-1] is high order part,
1911           # and same for @b
1912
1913           # subtract
1914
1915           $carry = 0;
1916           for ( $i = 0; $i < $n; $i++ )
1917           {
1918               $carry = $c[$i]->subtract($a[$i],$b[$i],$carry);
1919           }
1920
1921         Note that it makes no difference to this method whether the numbers
1922         in "$vec1" and "$vec2" are unsigned or signed (i.e., in two's
1923         complement binary representation).
1924
1925         Note however that the return value (carry flag) is not meaningful
1926         when the numbers are SIGNED.
1927
1928         Moreover, when the numbers are signed, a special type of error can
1929         occur which is commonly called an "overflow error".
1930
1931         An overflow error occurs when the sign of the result (its most
1932         significant bit) is flipped (i.e., falsified) by a carry over from
1933         the next-lower bit position ("MSB-1").
1934
1935         In fact matters are a bit more complicated than that: the overflow
1936         flag is set to "true" whenever there is a carry over from bit
1937         position MSB-1 to the most significant bit (MSB) but no carry over
1938         from the MSB to the output carry flag, or vice-versa, i.e., when
1939         there is no carry over from bit position MSB-1 to the most
1940         significant bit (MSB) but a carry over to the output carry flag.
1941
1942         Thus the overflow flag is the result of an exclusive-or operation
1943         between incoming and outgoing carry over at the most significant bit
1944         position.
1945
1946       • "$vec2->Neg($vec1);"
1947
1948         "$vec2->Negate($vec1);"
1949
1950         This method calculates the two's complement of the number in bit
1951         vector "$vec1" and stores the result in bit vector "$vec2".
1952
1953         Calculating the two's complement of a given number in binary
1954         representation consists of inverting all bits and incrementing the
1955         result by one.
1956
1957         This is the same as changing the sign of the given number from ""+""
1958         to ""-"" or vice-versa. In other words, applying this method twice on
1959         a given number yields the original number again.
1960
1961         Note that in-place processing is also possible, i.e., "$vec1" and
1962         "$vec2" may be identical.
1963
1964         Most importantly, beware that this method produces a counter-
1965         intuitive result if the number contained in bit vector "$vec1" is "2
1966         ^ (n-1)" (i.e., "1000...0000"), where ""n"" is the number of bits the
1967         given bit vector contains: The negated value of this number is the
1968         number itself!
1969
1970       • "$vec2->Abs($vec1);"
1971
1972         "$vec2->Absolute($vec1);"
1973
1974         Depending on the sign (i.e., the most significant bit) of the number
1975         in bit vector "$vec1", the contents of bit vector "$vec1" are copied
1976         to bit vector "$vec2" either with the method ""Copy()"" (if the
1977         number in bit vector "$vec1" is positive), or with ""Negate()"" (if
1978         the number in bit vector "$vec1" is negative).
1979
1980         In other words, this method calculates the absolute value of the
1981         number in bit vector "$vec1" and stores the result in bit vector
1982         "$vec2".
1983
1984         Note that in-place processing is also possible, i.e., "$vec1" and
1985         "$vec2" may be identical.
1986
1987         Most importantly, beware that this method produces a counter-
1988         intuitive result if the number contained in bit vector "$vec1" is "2
1989         ^ (n-1)" (i.e., "1000...0000"), where ""n"" is the number of bits the
1990         given bit vector contains: The absolute value of this number is the
1991         number itself, even though this number is still negative by
1992         definition (the most significant bit is still set)!
1993
1994       • "$sign = $vector->Sign();"
1995
1996         This method returns "0" if all bits in the given bit vector are
1997         cleared, i.e., if the given bit vector contains the number "0", or if
1998         the given bit vector has a length of zero (contains no bits at all).
1999
2000         If not all bits are cleared, this method returns ""-1"" if the most
2001         significant bit is set (i.e., if the bit vector contains a negative
2002         number), or "1" otherwise (i.e., if the bit vector contains a
2003         positive number).
2004
2005       • "$vec3->Multiply($vec1,$vec2);"
2006
2007         This method multiplies the two numbers contained in bit vector
2008         "$vec1" and "$vec2" and stores the result in bit vector "$vec3".
2009
2010         Note that this method regards its arguments as SIGNED.
2011
2012         If you want to make sure that a large number can never be treated as
2013         being negative by mistake, make your bit vectors at least one bit
2014         longer than the largest number you wish to represent, right from the
2015         start, or proceed as follows:
2016
2017             $msb1 = $vec1->msb();
2018             $msb2 = $vec2->msb();
2019             $vec1->Resize($vec1->Size()+1);
2020             $vec2->Resize($vec2->Size()+1);
2021             $vec3->Resize($vec3->Size()+1);
2022             $vec1->MSB($msb1);
2023             $vec2->MSB($msb2);
2024             $vec3->Multiply($vec1,$vec2);
2025
2026         Note also that all three bit vector arguments must in principle obey
2027         the rule of matching sizes, but that the bit vector "$vec3" may be
2028         larger than the two factors "$vec1" and "$vec2".
2029
2030         In fact multiplying two binary numbers with ""n"" bits may yield a
2031         result which is at most ""2n"" bits long.
2032
2033         Therefore, it is usually a good idea to let bit vector "$vec3" have
2034         twice the size of bit vector "$vec1" and "$vec2", unless you are
2035         absolutely sure that the result will fit into a bit vector of the
2036         same size as the two factors.
2037
2038         If you are wrong, a fatal "numeric overflow error" will occur.
2039
2040         Finally, note that in-place processing is possible, i.e., "$vec3" may
2041         be identical with "$vec1" or "$vec2", or both.
2042
2043       • "$quot->Divide($vec1,$vec2,$rest);"
2044
2045         This method divides the two numbers contained in bit vector "$vec1"
2046         and "$vec2" and stores the quotient in bit vector "$quot" and the
2047         remainder in bit vector "$rest".
2048
2049         I.e.,
2050                     $quot = $vec1 / $vec2;  #  div
2051                     $rest = $vec1 % $vec2;  #  mod
2052
2053         Therefore, "$quot" and "$rest" must be two DISTINCT bit vectors, or a
2054         fatal "result vector(s) must be distinct" error will occur.
2055
2056         Note also that a fatal "division by zero error" will occur if "$vec2"
2057         is equal to zero.
2058
2059         Note further that this method regards its arguments as SIGNED.
2060
2061         If you want to make sure that a large number can never be treated as
2062         being negative by mistake, make your bit vectors at least one bit
2063         longer than the largest number you wish to represent, right from the
2064         start, or proceed as follows:
2065
2066             $msb1 = $vec1->msb();
2067             $msb2 = $vec2->msb();
2068             $vec1->Resize($vec1->Size()+1);
2069             $vec2->Resize($vec2->Size()+1);
2070             $quot->Resize($quot->Size()+1);
2071             $rest->Resize($rest->Size()+1);
2072             $vec1->MSB($msb1);
2073             $vec2->MSB($msb2);
2074             $quot->Divide($vec1,$vec2,$rest);
2075
2076         Finally, note that in-place processing is possible, i.e., "$quot" may
2077         be identical with "$vec1" or "$vec2" or both, and "$rest" may also be
2078         identical with "$vec1" or "$vec2" or both, as long as "$quot" and
2079         "$rest" are distinct. (!)
2080
2081       • "$vecgcd->GCD($veca,$vecb);"
2082
2083         This method calculates the "Greatest Common Divisor" of the two
2084         numbers contained in bit vector "$veca" and "$vecb" and stores the
2085         result in bit vector "$vecgcd".
2086
2087         The method uses Euklid's algorithm internally:
2088
2089             int GCD(int a, int b)
2090             {
2091                 int t;
2092
2093                 while (b != 0)
2094                 {
2095                     t = a % b; /* = remainder of (a div b) */
2096                     a = b;
2097                     b = t;
2098                 }
2099                 return(a);
2100             }
2101
2102         Note that "GCD(z,0) == GCD(0,z) == z".
2103
2104       • "$vecgcd->GCD($vecx,$vecy,$veca,$vecb);"
2105
2106         This variant of the "GCD" method calculates the "Greatest Common
2107         Divisor" of the two numbers contained in bit vector "$veca" and
2108         "$vecb" and stores the result in bit vector "$vecgcd".
2109
2110         Moreover, it determines the two factors which are necessary in order
2111         to represent the greatest common divisor as a linear combination of
2112         its two arguments, i.e., the two factors "x" and "y" so that
2113         "GCD(a,b) == x * a + y * b", and stores them in bit vector "$vecx"
2114         and "$vecy", respectively.
2115
2116         For example:
2117
2118           a = 2322
2119           b =  654
2120
2121           GCD( 2322, 654 ) == 6
2122
2123           x =  20
2124           y = -71
2125
2126           20 * 2322 - 71 * 654 == 6
2127
2128         Please see http://www.cut-the-knot.org/blue/extension.shtml for an
2129         explanation of how this extension of Euklid's algorithm works.
2130
2131       • "$vec3->Power($vec1,$vec2);"
2132
2133         This method calculates the exponentiation of base "$vec1" elevated to
2134         the "$vec2" power, i.e., ""$vec1 ** $vec2"", and stores the result in
2135         bit vector "$vec3".
2136
2137         The method uses an efficient divide-and-conquer algorithm:
2138
2139         Suppose the exponent is (decimal) 13, for example. The binary
2140         representation of this exponent is "1101".
2141
2142         This means we want to calculate
2143
2144           $vec1 * $vec1 * $vec1 * $vec1 * $vec1 * $vec1 * $vec1 * $vec1 *
2145           $vec1 * $vec1 * $vec1 * $vec1 *
2146           $vec1
2147
2148         That is, "$vec1" multiplied with itself 13 times. The grouping into
2149         lines above is no coincidence. The first line comprises 8 factors,
2150         the second contains 4, and the last line just one. This just happens
2151         to be the binary representation of 13. ";-)"
2152
2153         We then calculate a series of squares (of squares of squares...) of
2154         the base, i.e.,
2155
2156           $power[0] = $vec1;
2157           $power[1] = $vec1 * $vec1;
2158           $power[2] = $power[1] * $power[1];
2159           $power[3] = $power[2] * $power[2];
2160           etc.
2161
2162         To calculate the power of our example, we simply initialize our
2163         result with 1 and consecutively multiply it with the items of the
2164         series of powers we just calculated, if the corresponding bit of the
2165         binary representation of the exponent is set:
2166
2167           $result = 1;
2168           $result *= $power[0] if ($vec2 & 1);
2169           $result *= $power[1] if ($vec2 & 2);
2170           $result *= $power[2] if ($vec2 & 4);
2171           $result *= $power[3] if ($vec2 & 8);
2172           etc.
2173
2174         The bit vector "$vec3" must be of the same size as the base "$vec1"
2175         or greater. "$vec3" and "$vec1" may be the same vector (i.e., in-
2176         place calculation as in ""$vec1 **= $vec2;"" is possible), but
2177         "$vec3" and "$vec2" must be distinct. Finally, the exponent "$vec2"
2178         must be positive. A fatal error occurs if any of these conditions is
2179         not met.
2180
2181       • "$vector->Block_Store($buffer);"
2182
2183         This method allows you to load the contents of a given bit vector in
2184         one go.
2185
2186         This is useful when you store the contents of a bit vector in a file,
2187         for instance (using method ""Block_Read()""), and when you want to
2188         restore the previously saved bit vector.
2189
2190         For this, "$buffer" MUST be a string (NO automatic conversion from
2191         numeric to string is provided here as would normally in Perl!)
2192         containing the bit vector in "low order byte first" order.
2193
2194         If the given string is shorter than what is needed to completely fill
2195         the given bit vector, the remaining (most significant) bytes of the
2196         bit vector are filled with zeros, i.e., the previous contents of the
2197         bit vector are always erased completely.
2198
2199         If the given string is longer than what is needed to completely fill
2200         the given bit vector, the superfluous bytes are simply ignored.
2201
2202         See "sysread" in perlfunc for how to read in the contents of
2203         "$buffer" from a file prior to passing it to this method.
2204
2205       • "$buffer = $vector->Block_Read();"
2206
2207         This method allows you to export the contents of a given bit vector
2208         in one block.
2209
2210         This is useful when you want to save the contents of a bit vector for
2211         later, for instance in a file.
2212
2213         The advantage of this method is that it allows you to do so in the
2214         compactest possible format, in binary.
2215
2216         The method returns a Perl string which contains an exact copy of the
2217         contents of the given bit vector in "low order byte first" order.
2218
2219         See "syswrite" in perlfunc for how to write the data from this string
2220         to a file.
2221
2222       • "$size = $vector->Word_Size();"
2223
2224         Each bit vector is internally organized as an array of machine words.
2225
2226         The methods whose names begin with "Word_" allow you to access this
2227         internal array of machine words.
2228
2229         Note that because the size of a machine word may vary from system to
2230         system, these methods are inherently MACHINE-DEPENDENT!
2231
2232         Therefore, DO NOT USE these methods unless you are absolutely certain
2233         that portability of your code is not an issue!
2234
2235         You have been warned!
2236
2237         To be machine-independent, use the methods whose names begin with
2238         ""Chunk_"" instead, with chunk sizes no greater than 32 bits.
2239
2240         The method ""Word_Size()"" returns the number of machine words that
2241         the internal array of words of the given bit vector contains.
2242
2243         This is similar in function to the term ""scalar(@array)"" for a Perl
2244         array.
2245
2246       • "$vector->Word_Store($offset,$word);"
2247
2248         This method allows you to store a given value "$word" at a given
2249         position "$offset" in the internal array of words of the given bit
2250         vector.
2251
2252         Note that "$offset" must lie in the permitted range between "0" and
2253         ""$vector->Word_Size()-1"", or a fatal "offset out of range" error
2254         will occur.
2255
2256         This method is similar in function to the expression
2257         ""$array[$offset] = $word;"" for a Perl array.
2258
2259       • "$word = $vector->Word_Read($offset);"
2260
2261         This method allows you to access the value of a given machine word at
2262         position "$offset" in the internal array of words of the given bit
2263         vector.
2264
2265         Note that "$offset" must lie in the permitted range between "0" and
2266         ""$vector->Word_Size()-1"", or a fatal "offset out of range" error
2267         will occur.
2268
2269         This method is similar in function to the expression ""$word =
2270         $array[$offset];"" for a Perl array.
2271
2272       • "$vector->Word_List_Store(@words);"
2273
2274         This method allows you to store a list of values "@words" in the
2275         internal array of machine words of the given bit vector.
2276
2277         Thereby the LEFTMOST value in the list ("$words[0]") is stored in the
2278         LEAST significant word of the internal array of words (the one with
2279         offset "0"), the next value from the list ("$words[1]") is stored in
2280         the word with offset "1", and so on, as intuitively expected.
2281
2282         If the list "@words" contains fewer elements than the internal array
2283         of words of the given bit vector contains machine words, the
2284         remaining (most significant) words are filled with zeros.
2285
2286         If the list "@words" contains more elements than the internal array
2287         of words of the given bit vector contains machine words, the
2288         superfluous values are simply ignored.
2289
2290         This method is comparable in function to the expression ""@array =
2291         @words;"" for a Perl array.
2292
2293       • "@words = $vector->Word_List_Read();"
2294
2295         This method allows you to retrieve the internal array of machine
2296         words of the given bit vector all at once.
2297
2298         Thereby the LEFTMOST value in the returned list ("$words[0]") is the
2299         LEAST significant word from the given bit vector, and the RIGHTMOST
2300         value in the returned list ("$words[$#words]") is the MOST
2301         significant word of the given bit vector.
2302
2303         This method is similar in function to the expression ""@words =
2304         @array;"" for a Perl array.
2305
2306       • "$vector->Word_Insert($offset,$count);"
2307
2308         This method inserts "$count" empty new machine words at position
2309         "$offset" in the internal array of words of the given bit vector.
2310
2311         The "$count" most significant words are lost, and all words starting
2312         with word number "$offset" up to and including word number
2313         ""$vector->Word_Size()-$count-1"" are moved up by "$count" places.
2314
2315         The now vacant "$count" words starting at word number "$offset" (up
2316         to and including word number ""$offset+$count-1"") are then set to
2317         zero (cleared).
2318
2319         Note that this method does NOT increase the size of the given bit
2320         vector, i.e., the bit vector is NOT extended at its upper end to
2321         "rescue" the "$count" uppermost (most significant) words - instead,
2322         these words are lost forever.
2323
2324         If you don't want this to happen, you have to increase the size of
2325         the given bit vector EXPLICITLY and BEFORE you perform the "Insert"
2326         operation, with a statement such as the following:
2327
2328           $vector->Resize($vector->Size() + $count * Bit::Vector->Word_Bits());
2329
2330         Note also that "$offset" must lie in the permitted range between "0"
2331         and ""$vector->Word_Size()-1"", or a fatal "offset out of range"
2332         error will occur.
2333
2334         If the term ""$offset + $count"" exceeds ""$vector->Word_Size()-1"",
2335         all the words starting with word number "$offset" up to word number
2336         ""$vector->Word_Size()-1"" are simply cleared.
2337
2338       • "$vector->Word_Delete($offset,$count);"
2339
2340         This method deletes, i.e., removes the words starting at position
2341         "$offset" up to and including word number ""$offset+$count-1"" from
2342         the internal array of machine words of the given bit vector.
2343
2344         The remaining uppermost words (starting at position
2345         ""$offset+$count"" up to and including word number
2346         ""$vector->Word_Size()-1"") are moved down by "$count" places.
2347
2348         The now vacant uppermost (most significant) "$count" words are then
2349         set to zero (cleared).
2350
2351         Note that this method does NOT decrease the size of the given bit
2352         vector, i.e., the bit vector is NOT clipped at its upper end to "get
2353         rid of" the vacant "$count" uppermost words.
2354
2355         If you don't want this, i.e., if you want the bit vector to shrink
2356         accordingly, you have to do so EXPLICITLY and AFTER the "Delete"
2357         operation, with a couple of statements such as these:
2358
2359           $bits = $vector->Size();
2360           $count *= Bit::Vector->Word_Bits();
2361           if ($count > $bits) { $count = $bits; }
2362           $vector->Resize($bits - $count);
2363
2364         Note also that "$offset" must lie in the permitted range between "0"
2365         and ""$vector->Word_Size()-1"", or a fatal "offset out of range"
2366         error will occur.
2367
2368         If the term ""$offset + $count"" exceeds ""$vector->Word_Size()-1"",
2369         all the words starting with word number "$offset" up to word number
2370         ""$vector->Word_Size()-1"" are simply cleared.
2371
2372       • "$vector->Chunk_Store($chunksize,$offset,$chunk);"
2373
2374         This method allows you to set more than one bit at a time with
2375         different values.
2376
2377         You can access chunks (i.e., ranges of contiguous bits) between one
2378         and at most ""Bit::Vector->Long_Bits()"" bits wide.
2379
2380         In order to be portable, though, you should never use chunk sizes
2381         larger than 32 bits.
2382
2383         If the given "$chunksize" does not lie between "1" and
2384         ""Bit::Vector->Long_Bits()"", a fatal "chunk size out of range" error
2385         will occur.
2386
2387         The method copies the "$chunksize" least significant bits from the
2388         value "$chunk" to the given bit vector, starting at bit position
2389         "$offset" and proceeding upwards until bit number
2390         ""$offset+$chunksize-1"".
2391
2392         (I.e., bit number "0" of "$chunk" becomes bit number "$offset" in the
2393         given bit vector, and bit number ""$chunksize-1"" becomes bit number
2394         ""$offset+$chunksize-1"".)
2395
2396         If the term ""$offset+$chunksize-1"" exceeds ""$vector->Size()-1"",
2397         the corresponding superfluous (most significant) bits from "$chunk"
2398         are simply ignored.
2399
2400         Note that "$offset" itself must lie in the permitted range between
2401         "0" and ""$vector->Size()-1"", or a fatal "offset out of range" error
2402         will occur.
2403
2404         This method (as well as the other ""Chunk_"" methods) is useful, for
2405         example, when you are reading in data in chunks of, say, 8 bits,
2406         which you need to access later, say, using 16 bits at a time (like
2407         audio CD wave files, for instance).
2408
2409       • "$chunk = $vector->Chunk_Read($chunksize,$offset);"
2410
2411         This method allows you to read the values of more than one bit at a
2412         time.
2413
2414         You can read chunks (i.e., ranges of contiguous bits) between one and
2415         at most ""Bit::Vector->Long_Bits()"" bits wide.
2416
2417         In order to be portable, though, you should never use chunk sizes
2418         larger than 32 bits.
2419
2420         If the given "$chunksize" does not lie between "1" and
2421         ""Bit::Vector->Long_Bits()"", a fatal "chunk size out of range" error
2422         will occur.
2423
2424         The method returns the "$chunksize" bits from the given bit vector
2425         starting at bit position "$offset" and proceeding upwards until bit
2426         number ""$offset+$chunksize-1"".
2427
2428         (I.e., bit number "$offset" of the given bit vector becomes bit
2429         number "0" of the returned value, and bit number
2430         ""$offset+$chunksize-1"" becomes bit number ""$chunksize-1"".)
2431
2432         If the term ""$offset+$chunksize-1"" exceeds ""$vector->Size()-1"",
2433         the non-existent bits are simply not returned.
2434
2435         Note that "$offset" itself must lie in the permitted range between
2436         "0" and ""$vector->Size()-1"", or a fatal "offset out of range" error
2437         will occur.
2438
2439       • "$vector->Chunk_List_Store($chunksize,@chunks);"
2440
2441         This method allows you to fill the given bit vector with a list of
2442         data packets ("chunks") of any size ("$chunksize") you like (within
2443         certain limits).
2444
2445         In fact the given "$chunksize" must lie in the range between "1" and
2446         ""Bit::Vector->Long_Bits()"", or a fatal "chunk size out of range"
2447         error will occur.
2448
2449         In order to be portable, though, you should never use chunk sizes
2450         larger than 32 bits.
2451
2452         The given bit vector is thereby filled in ascending order: The first
2453         chunk from the list (i.e., "$chunks[0]") fills the "$chunksize" least
2454         significant bits, the next chunk from the list ("$chunks[1]") fills
2455         the bits number "$chunksize" to number ""2*$chunksize-1"", the third
2456         chunk ("$chunks[2]") fills the bits number ""2*$chunksize"", to
2457         number ""3*$chunksize-1"", and so on.
2458
2459         If there a less chunks in the list than are needed to fill the entire
2460         bit vector, the remaining (most significant) bits are cleared, i.e.,
2461         the previous contents of the given bit vector are always erased
2462         completely.
2463
2464         If there are more chunks in the list than are needed to fill the
2465         entire bit vector, and/or if a chunk extends beyond
2466         ""$vector->Size()-1"" (which happens whenever ""$vector->Size()"" is
2467         not a multiple of "$chunksize"), the superfluous chunks and/or bits
2468         are simply ignored.
2469
2470         The method is useful, for example (and among many other
2471         applications), for the conversion of packet sizes in a data stream.
2472
2473         This method can also be used to store an octal string in a given bit
2474         vector:
2475
2476           $vector->Chunk_List_Store(3, split(//, reverse $string));
2477
2478         Note however that unlike the conversion methods ""from_Hex()"",
2479         ""from_Bin()"", ""from_Dec()"" and ""from_Enum()"", this statement
2480         does not include any syntax checking, i.e., it may fail silently,
2481         without warning.
2482
2483         To perform syntax checking, add the following statements:
2484
2485           if ($string =~ /^[0-7]+$/)
2486           {
2487               # okay, go ahead with conversion as shown above
2488           }
2489           else
2490           {
2491               # error, string contains other than octal characters
2492           }
2493
2494         Another application is to store a repetitive pattern in a given bit
2495         vector:
2496
2497           $pattern = 0xDEADBEEF;
2498           $length = 32;            # = length of $pattern in bits
2499           $size = $vector->Size();
2500           $factor = int($size / $length);
2501           if ($size % $length) { $factor++; }
2502           $vector->Chunk_List_Store($length, ($pattern) x $factor);
2503
2504       • "@chunks = $vector->Chunk_List_Read($chunksize);"
2505
2506         This method allows you to access the contents of the given bit vector
2507         in form of a list of data packets ("chunks") of a size ("$chunksize")
2508         of your choosing (within certain limits).
2509
2510         In fact the given "$chunksize" must lie in the range between "1" and
2511         ""Bit::Vector->Long_Bits()"", or a fatal "chunk size out of range"
2512         error will occur.
2513
2514         In order to be portable, though, you should never use chunk sizes
2515         larger than 32 bits.
2516
2517         The given bit vector is thereby read in ascending order: The
2518         "$chunksize" least significant bits (bits number "0" to
2519         ""$chunksize-1"") become the first chunk in the returned list (i.e.,
2520         "$chunks[0]"). The bits number "$chunksize" to ""2*$chunksize-1""
2521         become the next chunk in the list ("$chunks[1]"), and so on.
2522
2523         If ""$vector->Size()"" is not a multiple of "$chunksize", the last
2524         chunk in the list will contain fewer bits than "$chunksize".
2525
2526         BEWARE that for large bit vectors and/or small values of
2527         "$chunksize", the number of returned list elements can be extremely
2528         large! BE CAREFUL!
2529
2530         You could blow up your application with lack of memory (each list
2531         element is a full-grown Perl scalar, internally, with an associated
2532         memory overhead for its administration!) or at least cause a
2533         noticeable, more or less long-lasting "freeze" of your application!
2534
2535         Possible applications:
2536
2537         The method is especially useful in the conversion of packet sizes in
2538         a data stream.
2539
2540         This method can also be used to convert a given bit vector to a
2541         string of octal numbers:
2542
2543           $string = reverse join('', $vector->Chunk_List_Read(3));
2544
2545       • "$vector->Index_List_Remove(@indices);"
2546
2547         This method allows you to specify a list of indices of bits which
2548         should be turned off in the given bit vector.
2549
2550         In fact this method is a shortcut for
2551
2552             foreach $index (@indices)
2553             {
2554                 $vector->Bit_Off($index);
2555             }
2556
2557         In contrast to all other import methods in this module, this method
2558         does NOT clear the given bit vector before processing its list of
2559         arguments.
2560
2561         Instead, this method allows you to accumulate the results of various
2562         consecutive calls.
2563
2564         (The same holds for the method ""Index_List_Store()"". As a
2565         consequence, you can "wipe out" what you did using the method
2566         ""Index_List_Remove()"" by passing the identical argument list to the
2567         method ""Index_List_Store()"".)
2568
2569       • "$vector->Index_List_Store(@indices);"
2570
2571         This method allows you to specify a list of indices of bits which
2572         should be turned on in the given bit vector.
2573
2574         In fact this method is a shortcut for
2575
2576             foreach $index (@indices)
2577             {
2578                 $vector->Bit_On($index);
2579             }
2580
2581         In contrast to all other import methods in this module, this method
2582         does NOT clear the given bit vector before processing its list of
2583         arguments.
2584
2585         Instead, this method allows you to accumulate the results of various
2586         consecutive calls.
2587
2588         (The same holds for the method ""Index_List_Remove()"". As a
2589         consequence, you can "wipe out" what you did using the method
2590         ""Index_List_Store()"" by passing the identical argument list to the
2591         method ""Index_List_Remove()"".)
2592
2593       • "@indices = $vector->Index_List_Read();"
2594
2595         This method returns a list of Perl scalars.
2596
2597         The list contains one scalar for each set bit in the given bit
2598         vector.
2599
2600         BEWARE that for large bit vectors, this can result in a literally
2601         overwhelming number of list elements! BE CAREFUL! You could run out
2602         of memory or slow down your application considerably!
2603
2604         Each scalar contains the number of the index corresponding to the bit
2605         in question.
2606
2607         These indices are always returned in ascending order.
2608
2609         If the given bit vector is empty (contains only cleared bits) or if
2610         it has a length of zero (if it contains no bits at all), the method
2611         returns an empty list.
2612
2613         This method can be useful, for instance, to obtain a list of prime
2614         numbers:
2615
2616             $limit = 1000; # or whatever
2617             $vector = Bit::Vector->new($limit+1);
2618             $vector->Primes();
2619             @primes = $vector->Index_List_Read();
2620
2621       • "$vec3->Or($vec1,$vec2);"
2622
2623         "$set3->Union($set1,$set2);"
2624
2625         This method calculates the union of "$set1" and "$set2" and stores
2626         the result in "$set3".
2627
2628         This is usually written as ""$set3 = $set1 u $set2"" in set theory
2629         (where "u" is the "cup" operator).
2630
2631         (On systems where the "cup" character is unavailable this operator is
2632         often denoted by a plus sign "+".)
2633
2634         In-place calculation is also possible, i.e., "$set3" may be identical
2635         with "$set1" or "$set2" or both.
2636
2637       • "$vec3->And($vec1,$vec2);"
2638
2639         "$set3->Intersection($set1,$set2);"
2640
2641         This method calculates the intersection of "$set1" and "$set2" and
2642         stores the result in "$set3".
2643
2644         This is usually written as ""$set3 = $set1 n $set2"" in set theory
2645         (where "n" is the "cap" operator).
2646
2647         (On systems where the "cap" character is unavailable this operator is
2648         often denoted by an asterisk "*".)
2649
2650         In-place calculation is also possible, i.e., "$set3" may be identical
2651         with "$set1" or "$set2" or both.
2652
2653       • "$vec3->AndNot($vec1,$vec2);"
2654
2655         "$set3->Difference($set1,$set2);"
2656
2657         This method calculates the difference of "$set1" less "$set2" and
2658         stores the result in "$set3".
2659
2660         This is usually written as ""$set3 = $set1 \ $set2"" in set theory
2661         (where "\" is the "less" operator).
2662
2663         In-place calculation is also possible, i.e., "$set3" may be identical
2664         with "$set1" or "$set2" or both.
2665
2666       • "$vec3->Xor($vec1,$vec2);"
2667
2668         "$set3->ExclusiveOr($set1,$set2);"
2669
2670         This method calculates the symmetric difference of "$set1" and
2671         "$set2" and stores the result in "$set3".
2672
2673         This can be written as ""$set3 = ($set1 u $set2) \ ($set1 n $set2)""
2674         in set theory (the union of the two sets less their intersection).
2675
2676         When sets are implemented as bit vectors then the above formula is
2677         equivalent to the exclusive-or between corresponding bits of the two
2678         bit vectors (hence the name of this method).
2679
2680         Note that this method is also much more efficient than evaluating the
2681         above formula explicitly since it uses a built-in machine language
2682         instruction internally.
2683
2684         In-place calculation is also possible, i.e., "$set3" may be identical
2685         with "$set1" or "$set2" or both.
2686
2687       • "$vec2->Not($vec1);"
2688
2689         "$set2->Complement($set1);"
2690
2691         This method calculates the complement of "$set1" and stores the
2692         result in "$set2".
2693
2694         In "big integer" arithmetic, this is equivalent to calculating the
2695         one's complement of the number stored in the bit vector "$set1" in
2696         binary representation.
2697
2698         In-place calculation is also possible, i.e., "$set2" may be identical
2699         with "$set1".
2700
2701       • "if ($set1->subset($set2))"
2702
2703         Returns "true" ("1") if "$set1" is a subset of "$set2" (i.e.,
2704         completely contained in "$set2") and "false" ("0") otherwise.
2705
2706         This means that any bit which is set ("1") in "$set1" must also be
2707         set in "$set2", but "$set2" may contain set bits which are not set in
2708         "$set1", in order for the condition of subset relationship to be true
2709         between these two sets.
2710
2711         Note that by definition, if two sets are identical, they are also
2712         subsets (and also supersets) of each other.
2713
2714       • "$norm = $set->Norm();"
2715
2716         Returns the norm (number of bits which are set) of the given vector.
2717
2718         This is equivalent to the number of elements contained in the given
2719         set.
2720
2721         Uses a byte lookup table for calculating the number of set bits per
2722         byte, and thus needs a time for evaluation (and a number of loops)
2723         linearly proportional to the length of the given bit vector (in
2724         bytes).
2725
2726         This should be the fastest algorithm on average.
2727
2728       • "$norm = $set->Norm2();"
2729
2730         Returns the norm (number of bits which are set) of the given vector.
2731
2732         This is equivalent to the number of elements contained in the given
2733         set.
2734
2735         This does the same as the method ""Norm()"" above, only with a
2736         different algorithm:
2737
2738         This method counts the number of set and cleared bits at the same
2739         time and will stop when either of them has been exhausted, thus
2740         needing at most half as many loops per machine word as the total
2741         number of bits in a machine word - in fact it will need a number of
2742         loops equal to the minimum of the number of set bits and the number
2743         of cleared bits.
2744
2745         This might be a faster algorithm than of the method ""Norm()"" above
2746         on some systems, depending on the system's architecture and the
2747         compiler and optimisation used, for bit vectors with sparse set bits
2748         and for bit vectors with sparse cleared bits (i.e., predominantly set
2749         bits).
2750
2751       • "$norm = $set->Norm3();"
2752
2753         Returns the norm (number of bits which are set) of the given vector.
2754
2755         This is equivalent to the number of elements contained in the given
2756         set.
2757
2758         This does the same as the two methods ""Norm()"" and ""Norm2()""
2759         above, however with a different algorithm.
2760
2761         In fact this is the implementation of the method ""Norm()"" used in
2762         previous versions of this module.
2763
2764         The method needs a number of loops per machine word equal to the
2765         number of set bits in that machine word.
2766
2767         Only for bit vectors with sparse set bits will this method be fast;
2768         it will depend on a system's architecture and compiler whether the
2769         method will be faster than any of the two methods above in such
2770         cases.
2771
2772         On average however, this is probably the slowest method of the three.
2773
2774       • "$min = $set->Min();"
2775
2776         Returns the minimum of the given set, i.e., the minimum of all
2777         indices of all set bits in the given bit vector "$set".
2778
2779         If the set is empty (no set bits), plus infinity (represented by the
2780         constant "MAX_LONG" on your system) is returned.
2781
2782         (This constant is usually 2 ^ (n-1) - 1, where ""n"" is the number of
2783         bits of an unsigned long on your machine.)
2784
2785       • "$max = $set->Max();"
2786
2787         Returns the maximum of the given set, i.e., the maximum of all
2788         indices of all set bits in the given bit vector "$set".
2789
2790         If the set is empty (no set bits), minus infinity (represented by the
2791         constant "MIN_LONG" on your system) is returned.
2792
2793         (This constant is usually -(2 ^ (n-1) - 1) or -(2 ^ (n-1)), where
2794         ""n"" is the number of bits of an unsigned long on your machine.)
2795
2796       • "$m3->Multiplication($r3,$c3,$m1,$r1,$c1,$m2,$r2,$c2);"
2797
2798         This method multiplies two boolean matrices (stored as bit vectors)
2799         "$m1" and "$m2" and stores the result in matrix "$m3".
2800
2801         The method uses the binary "xor" operation (""^"") as the boolean
2802         addition operator (""+"").
2803
2804         An exception is raised if the product of the number of rows and
2805         columns of any of the three matrices differs from the actual size of
2806         their underlying bit vector.
2807
2808         An exception is also raised if the numbers of rows and columns of the
2809         three matrices do not harmonize in the required manner:
2810
2811           rows3 == rows1
2812           cols3 == cols2
2813           cols1 == rows2
2814
2815         This method is used by the module "Math::MatrixBool".
2816
2817         See Math::MatrixBool(3) for details.
2818
2819       • "$m3->Product($r3,$c3,$m1,$r1,$c1,$m2,$r2,$c2);"
2820
2821         This method multiplies two boolean matrices (stored as bit vectors)
2822         "$m1" and "$m2" and stores the result in matrix "$m3".
2823
2824         This special method uses the binary "or" operation (""|"") as the
2825         boolean addition operator (""+"").
2826
2827         An exception is raised if the product of the number of rows and
2828         columns of any of the three matrices differs from the actual size of
2829         their underlying bit vector.
2830
2831         An exception is also raised if the numbers of rows and columns of the
2832         three matrices do not harmonize in the required manner:
2833
2834           rows3 == rows1
2835           cols3 == cols2
2836           cols1 == rows2
2837
2838         This method is used by the module "Math::MatrixBool".
2839
2840         See Math::MatrixBool(3) for details.
2841
2842       • "$matrix->Closure($rows,$cols);"
2843
2844         This method calculates the reflexive transitive closure of the given
2845         boolean matrix (stored as a bit vector) using Kleene's algoritm.
2846
2847         (See Math::Kleene(3) for a brief introduction into the theory behind
2848         Kleene's algorithm.)
2849
2850         The reflexive transitive closure answers the question whether a path
2851         exists between any two vertices of a graph whose edges are given as a
2852         matrix:
2853
2854         If a (directed) edge exists going from vertex "i" to vertex "j", then
2855         the element in the matrix with coordinates (i,j) is set to "1"
2856         (otherwise it remains set to "0").
2857
2858         If the edges are undirected, the resulting matrix is symmetric, i.e.,
2859         elements (i,j) and (j,i) always contain the same value.
2860
2861         The matrix representing the edges of the graph only answers the
2862         question whether an EDGE exists between any two vertices of the graph
2863         or not, whereas the reflexive transitive closure answers the question
2864         whether a PATH (a series of adjacent edges) exists between any two
2865         vertices of the graph!
2866
2867         Note that the contents of the given matrix are modified by this
2868         method, so make a copy of the initial matrix in time if you are going
2869         to need it again later.
2870
2871         An exception is raised if the given matrix is not quadratic, i.e., if
2872         the number of rows and columns of the given matrix is not identical.
2873
2874         An exception is also raised if the product of the number of rows and
2875         columns of the given matrix differs from the actual size of its
2876         underlying bit vector.
2877
2878         This method is used by the module "Math::MatrixBool".
2879
2880         See Math::MatrixBool(3) for details.
2881
2882       • "$matrix2->Transpose($rows2,$cols2,$matrix1,$rows1,$cols1);"
2883
2884         This method calculates the transpose of a boolean matrix "$matrix1"
2885         (stored as a bit vector) and stores the result in matrix "$matrix2".
2886
2887         The transpose of a boolean matrix, representing the edges of a graph,
2888         can be used for finding the strongly connected components of that
2889         graph.
2890
2891         An exception is raised if the product of the number of rows and
2892         columns of any of the two matrices differs from the actual size of
2893         its underlying bit vector.
2894
2895         An exception is also raised if the following conditions are not met:
2896
2897           rows2 == cols1
2898           cols2 == rows1
2899
2900         Note that in-place processing ("$matrix1" and "$matrix2" are
2901         identical) is only possible if the matrix is quadratic. Otherwise, a
2902         fatal "matrix is not quadratic" error will occur.
2903
2904         This method is used by the module "Math::MatrixBool".
2905
2906         See Math::MatrixBool(3) for details.
2907

SEE ALSO

2909       Bit::Vector::Overload(3), Bit::Vector::String(3), Storable(3).
2910
2911       Set::IntRange(3), Math::MatrixBool(3), Math::MatrixReal(3),
2912       DFA::Kleene(3), Math::Kleene(3), Graph::Kruskal(3).
2913

VERSION

2915       This man page documents "Bit::Vector" version 7.4.
2916

AUTHOR

2918         Steffen Beyer
2919         mailto:STBEY@cpan.org
2920         http://www.engelschall.com/u/sb/download/
2921
2923       Copyright (c) 1995 - 2013 by Steffen Beyer. All rights reserved.
2924

LICENSE

2926       This package is free software; you can redistribute it and/or modify it
2927       under the same terms as Perl itself, i.e., under the terms of the
2928       "Artistic License" or the "GNU General Public License".
2929
2930       The C library at the core of this Perl module can additionally be
2931       redistributed and/or modified under the terms of the "GNU Library
2932       General Public License".
2933
2934       Please refer to the files "Artistic.txt", "GNU_GPL.txt" and
2935       "GNU_LGPL.txt" in this distribution for details!
2936

DISCLAIMER

2938       This package is distributed in the hope that it will be useful, but
2939       WITHOUT ANY WARRANTY; without even the implied warranty of
2940       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
2941
2942       See the "GNU General Public License" for more details.
2943
2944
2945
2946perl v5.34.0                      2021-07-22                         Vector(3)
Impressum