SYNOPSIS
use Slurm;
$bitmap = Slurm::Bitstr::alloc(32);
if ($bitmap->test(10)) {
print "bit 10 is set\n";
}
DESCRIPTION
The Slurm::Bitstr class is a wrapper of the bit string functions in libslurm. This package is loaded and bootstrapped with package Slurm.METHODS
$bitmap = Slurm::Bitstr::alloc($nbits);Allocate a bitstring object with $nbits bits. An opaque bitstr object is returned. This is a CLASS METHOD.
$bitmap->realloc($nbits);
Reallocate a bitstring(expand or contract size). $nbits is the number of bits in the new bitstring.
$len = $bitmap->size();
Return the number of possible bits in a bitstring.
$cond = $bitmap->test($n);
Check if bit $n of $bitmap is set.
$bitmap->set($n);
Set bit $n of $bitmap.
$bitmap->clear($n);
Clear bit $n of $bitmap.
$bitmap->nset($start, $stop);
Set bits $start .. $stop in $bitmap.
$bitmap->nclear($start, $stop);
Clear bits $start .. $stop in $bitmap.
$pos = $bitmap->ffc();
Find first bit clear in $bitmap.
$pos = $bitmap->nffc($n)
Find the first $n contiguous bits clear in $bitmap.
$pos = $bitmap->noc($n, $seed);
Find $n contiguous bits clear in $bitmap starting at offset $seed.
$pos = $bitmap->nffs($n);
Find the first $n contiguous bits set in $bitmap.
$pos = $bitmap->ffs();
Find first bit set in $bitmap;
$pos = $bitmap->fls();
Find last bit set in $bitmap;
$bitmap->fill_gaps();
Set all bits of $bitmap between the first and last bits set(i.e. fill in the gaps to make set bits contiguous).
$cond = $bitmap1->super_set($bitmap2);
Return 1 if all bits set in $bitmap1 are also set in $bitmap2, 0 otherwise.
$cond = $bitmap1->equal($bitmap2);
Return 1 if $bitmap1 and $bitmap2 are identical, 0 otherwise.
$bitmap1->and($bitmap2);
$bitmap1 &= $bitmap2.
$bitmap->not();
$bitmap = ~$bitmap.
$bitmap1->or($bitmap2);
$bitmap1 |= $bitmap2.
$new = $bitmap->copy();
Return a copy of the supplied bitmap.
$dest_bitmap->copybits($src_bitmap);
Copy all bits of $src_bitmap to $dest_bitmap.
$n = $bitmap->set_count();
Count the number of bits set in bitstring.
$n = $bitmap1->overlap($bitmap2);
Return number of bits set in $bitmap1 that are also set in $bitmap2, 0 if no overlap.
$n = $bitmap->clear_count();
Count the number of bits clear in bitstring.
$n = $bitmap->nset_max_count();
Return the count of the largest number of contiguous bits set in $bitmap.
$sum = $bitmap->inst_and_set_count($int_array);
And $int_array and $bitmap and sum the elements corresponding to set entries in $bitmap.
$new = $bitmap->rotate_copy($n, $nbits);
Return a copy of $bitmap rotated by $n bits. Number of bit in the new bitmap is $nbits.
$bitmap->rotate($n);
Rotate $bitmap by $n bits.
$new = $bitmap->pick_cnt($nbits);
Build a bitmap containing the first $nbits of $bitmap which are set.
$str = $bitmap->fmt();
Convert $bitmap to range string format, e.g. 0-5,42
$rc = $bitmap->unfmt($str);
Convert range string format to bitmap.
$array = Slurm::Bitstr::bitfmt2int($str);
Convert $str describing bitmap (output from fmt(), e.g. ``0-30,45,50-60'') into an array of integer (start/edn) pairs terminated by -1 (e.g. ``0, 30, 45, 45, 50, 60, -1'').
$str = $bitmap->fmt_hexmask();
Given a bit string, allocate and return a string in the form of:
``0x0123ABC\0''
^ ^
| |
MSB LSB
$rc = $bitmap->unfmt_hexmask($str);
Give a hex mask string ``0x0123ABC\0'', convert to a bit string.
^ ^
| |
MSB LSB
$str = $bitmap->fmt_binmask();
Given a bit string, allocate and return a binary string in the form of:
``0001010\0''
^ ^
| |
MSB LSB
$rc = $bitmap->unfmt_binmask($str);
Give a bin mask string ``0001010\0'', convert to a bit string.
^ ^
| |
MSB LSB
$pos = $bitmap->get_bit_num($n);
Find position of the $n-th set bit(0 based, i.e., the first set bit is the 0-th) in $bitmap. Returns -1 if there are less than $n bits set.
$n = $bitmap->get_pos_num($pos);
Find the number of bits set minus one in $bitmap between bit position [0 .. $pos]. Returns -1 if no bits are set between [0 .. $pos].
AUTHOR
This library is created by Hongjia Cao, <hjcao(AT)nudt.edu.cn> and Danny Auble, <da(AT)llnl.gov>. It is distributed with SLURM.COPYRIGHT AND LICENSE
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.4 or, at your option, any later version of Perl 5 you may have available.