NAME
Bit::Vector - arbitrary length bit vectors base class
This module implements efficient methods for handling bit vectors.
It is intended to serve as a base class for other applications or application classes, such as implementing sets or performing big integer arithmetic.
All methods are implemented in C internally for maximum performance.
The module also provides overloaded arithmetic and relational operators for maximum ease of use.
SYNOPSIS
CLASS METHODS (implemented in C)
Version
$version = Bit::Vector->Version();
Word_Bits
$bits = Bit::Vector->Word_Bits(); # bits in a machine word
Long_Bits
$bits = Bit::Vector->Long_Bits(); # bits in an unsigned long
new
$vector = Bit::Vector->new($bits); # bit vector constructor
OBJECT METHODS (implemented in C)
new
$vec2 = $vec1->new($bits); # alternative constructor
Shadow
$vec2 = $vec1->Shadow(); # new vector, same size but empty
Clone
$vec2 = $vec1->Clone(); # new vector, exact copy
Concat
$vector = $vec1->Concat($vec2);
Concat_List
$vector = $vec1->Concat_List($vec2,$vec3,...);
$vector = Bit::Vector::Concat_List(@bitvectors);
Size
$bits = $vector->Size();
Resize
$vector->Resize($bits);
$vector->Resize($vector->Size()+5);
$vector->Resize($vector->Size()-5);
Copy
$vec2->Copy($vec1);
Empty
$vector->Empty();
Fill
$vector->Fill();
Flip
$vector->Flip();
Primes
$vector->Primes(); # Sieve of Erathostenes
Reverse
$vec2->Reverse($vec1);
Interval_Empty
$vector->Interval_Empty($min,$max);
Interval_Fill
$vector->Interval_Fill($min,$max);
Interval_Flip
$vector->Interval_Flip($min,$max);
Interval_Reverse
$vector->Interval_Reverse($min,$max);
Interval_Scan_inc
if (($min,$max) = $vector->Interval_Scan_inc($start))
Interval_Scan_dec
if (($min,$max) = $vector->Interval_Scan_dec($start))
Interval_Copy
$vec2->Interval_Copy($vec1,$offset2,$offset1,$length);
Interval_Substitute
$vec2->Interval_Substitute($vec1,$off2,$len2,$off1,$len1);
is_empty
if ($vector->is_empty())
is_full
if ($vector->is_full())
equal
if ($vec1->equal($vec2))
Compare
if ($vec1->Compare($vec2) == 0) # true if $vec1 == $vec2
if ($vec1->Compare($vec2) != 0) # true if $vec1 != $vec2
if ($vec1->Compare($vec2) < 0) # true if $vec1 < $vec2
if ($vec1->Compare($vec2) <= 0) # true if $vec1 <= $vec2
if ($vec1->Compare($vec2) > 0) # true if $vec1 > $vec2
if ($vec1->Compare($vec2) >= 0) # true if $vec1 >= $vec2
to_Hex
$string = $vector->to_Hex();
from_hex
$ok = $vector->from_hex($string);
to_Bin
$string = $vector->to_Bin();
from_bin
$ok = $vector->from_bin($string);
to_Dec
$string = $vector->to_Dec();
from_dec
$ok = $vector->from_dec($string);
to_Enum
$string = $vector->to_Enum(); # e.g. "2,3,5-7,11,13-19"
from_enum
$ok = $vector->from_enum($string);
Bit_Off
$vector->Bit_Off($index);
Bit_On
$vector->Bit_On($index);
bit_flip
$bit = $vector->bit_flip($index);
bit_test, contains
$bit = $vector->bit_test($index);
$bit = $vector->contains($index);
if ($vector->bit_test($index))
if ($vector->contains($index))
Bit_Copy
$vector->Bit_Copy($index,$bit);
lsb
$bit = $vector->lsb();
msb
$bit = $vector->msb();
rotate_left
$carry = $vector->rotate_left();
rotate_right
$carry = $vector->rotate_right();
shift_left
$carry = $vector->shift_left($carry);
shift_right
$carry = $vector->shift_right($carry);
Move_Left
$vector->Move_Left($bits); # shift left "$bits" positions
Move_Right
$vector->Move_Right($bits); # shift right "$bits" positions
Insert
$vector->Insert($offset,$bits);
Delete
$vector->Delete($offset,$bits);
increment
$carry = $vector->increment();
decrement
$carry = $vector->decrement();
add
$carry = $vec3->add($vec1,$vec2,$carry);
subtract
$carry = $vec3->subtract($vec1,$vec2,$carry);
Negate
$vec2->Negate($vec1);
Absolute
$vec2->Absolute($vec1);
Sign
if ($vector->Sign() == 0)
if ($vector->Sign() != 0)
if ($vector->Sign() < 0)
if ($vector->Sign() <= 0)
if ($vector->Sign() > 0)
if ($vector->Sign() >= 0)
Multiply
$vec3->Multiply($vec1,$vec2);
Divide
$quot->Divide($vec1,$vec2,$rest);
GCD (Greatest Common Divisor)
$vec3->GCD($vec1,$vec2);
Block_Store
$vector->Block_Store($buffer);
Block_Read
$buffer = $vector->Block_Read();
Word_Size
$size = $vector->Word_Size(); # number of words in "$vector"
Word_Store
$vector->Word_Store($offset,$word);
Word_Read
$word = $vector->Word_Read($offset);
Word_List_Store
$vector->Word_List_Store(@words);
Word_List_Read
@words = $vector->Word_List_Read();
Word_Insert
$vector->Word_Insert($offset,$count);
Word_Delete
$vector->Word_Delete($offset,$count);
Chunk_Store
$vector->Chunk_Store($chunksize,$offset,$chunk);
Chunk_Read
$chunk = $vector->Chunk_Read($chunksize,$offset);
Chunk_List_Store
$vector->Chunk_List_Store($chunksize,@chunks);
Chunk_List_Read
@chunks = $vector->Chunk_List_Read($chunksize);
Index_List_Remove
$vector->Index_List_Remove(@indices);
Index_List_Store
$vector->Index_List_Store(@indices);
Index_List_Read
@indices = $vector->Index_List_Read();
Union
$set3->Union($set1,$set2);
Intersection
$set3->Intersection($set1,$set2);
Difference
$set3->Difference($set1,$set2);
ExclusiveOr
$set3->ExclusiveOr($set1,$set2);
Complement
$set2->Complement($set1);
subset
if ($set1->subset($set2)) # true if $set1 is subset of $set2
Norm
$norm = $set->Norm();
Min
$min = $set->Min();
Max
$max = $set->Max();
Multiplication
$matrix3->Multiplication($rows3,$cols3,
$matrix1,$rows1,$cols1,
$matrix2,$rows2,$cols2);
Closure
$matrix->Closure($rows,$cols);
Transpose
$matrix2->Transpose($rows2,$cols2,$matrix1,$rows1,$cols1);
CLASS METHODS (implemented in Perl)
Configuration
$config = Bit::Vector->Configuration();
Bit::Vector->Configuration($config);
$config = Bit::Vector->Configuration($config);
OVERLOADED OPERATORS (implemented in Perl)
(under construction)
IMPORTANT NOTES
Method naming convention
Method names completely in lower case indicate a boolean return value.
(Except for the bit vector constructor method "
new()
", of course.)Boolean return values
Boolean return values from this module are always a numeric zero ("0") for "false" and a numeric one ("1") for "true".
Numeric input parameters
All numeric input parameters are regarded as being unsigned by this module.
As a consequence, whenever you pass a negative number as an argument to some method in this module, it will be treated as a (usually very large) positive number due to its internal 2's complement representation, usually resulting in an "index out of range" error message and program abortion.
Note that this does not apply to "big integer" decimal numbers, which are (usually) passed as strings, and which may of course be negative.
DESCRIPTION
(under construction)
SEE ALSO
Set::IntegerFast(3), Set::IntegerRange(3), Math::MatrixBool(3), Math::MatrixReal(3), DFA::Kleene(3), Math::Kleene(3), Graph::Kruskal(3).
perl(1), perlsub(1), perlmod(1), perlref(1), perlobj(1), perlbot(1), perltoot(1), perlxs(1), perlxstut(1), perlguts(1), overload(3).
VERSION
This man page documents "Bit::Vector" version 5.0.
AUTHOR
Steffen Beyer <sb@sdm.de>.
COPYRIGHT
Copyright (c) 1995, 1996, 1997 by Steffen Beyer. All rights reserved.
LICENSE
Please refer to the file "LICENSE" in this module's distribution for the exact terms under which this package may be used and distributed!