Subject: ANNOUNCE: Bit::Vector 5.0 BETA 2
From: [email-masked] (Steffen Beyer)
Date: 29 Dec 1997 14:40:52 GMT
Newsgroups: comp.lang.perl.announce,comp.lang.perl.modules

I am glad to announce the second beta release of version 5.0
of my "Bit::Vector" module:

                    =====================================
                      Package "Bit::Vector" Version 5.0
                    =====================================
                      for Perl version 5.000 and higher

It is available either from my web site at

                  http://www.engelschall.com/u/sb/download/

or from any CPAN mirror server (allow a few days for propagation
if necessary):

                  http://www.perl.com/CPAN/authors/id/STBEY/

This new beta release contains four new features:

1) Concatenation of bit vectors

2) Bit vectors of length zero (i.e, containing 0 bits) are now
   possible (in order to make concatenation and substitution
   more consistent and more versatile)

3) You can calculate the reverse of a bit vector now (the LSB
   becomes the MSB and vice-versa)

4) The C library at the core of this module now also performs
   parameter checks (which were done exclusively in the XS
   layer in all previous versions)

According to the feedback I received for version 5.0b1 (not a
single bug report!), that version seems to be very stable already.

I am confident that this is true for this version as well.

Should this assumption prove wrong, please do not hesitate to
leave me a message at <[email-masked]>!

Please note that the documentation is still rudimentary (synopsis
is quite complete but detailed descriptions are lacking), which is
also the main reason why I still call this version "beta".

Moreover, the accompanying test scripts do not cover all of the
new features yet; but these features have been tested on my machine
and should therefore work as intended.

What does it do:
----------------

This module is useful for a large range of different tasks:

  -  For example for implementing sets and performing set operations
     (like union, difference, intersection, complement, check for subset
     relationship etc.),

  -  as a basis for many efficient algorithms (the complexities of the
     methods in this module are usually either O(1) or O(n/b), where
     "b" is the number of bits in a machine word on your system),
     like the "Sieve of Erathostenes" (for calculating prime numbers),

  -  for using shift registers (for instance for cyclic redundancy
     checksums) of arbitrary length,

  -  to calculate "look-ahead", "first" and "follow" character sets
     for parsers and compiler-compilers,

  -  for graph algorithms,

  -  for efficient storage and retrieval of status information,

  -  for performing text generation depending on logical expressions,

  -  for big integer arithmetic,

  -  for manipulations of chunks of bits of arbitrary size,

and more.

A large number of import/export methods allow you to access individual
bits, contiguous ranges of bits, machine words, arbitrary chunks of
bits, lists (arrays) of chunks of bits or machine words and a whole
bit vector at once (for instance for blockread/-write to and from
a file).

You can also import and export the contents of a bit vector in binary,
hexadecimal and decimal representation as well as ".newsrc" style
enumerations.

Note that this module is especially designed for efficiency, which is
also the reason why its methods are implemented in C.

To further increase execution speed, the module doesn't use bytes as its
basic storage unit, but rather uses machine words, assuming that a machine
word is the most efficiently handled size of all scalar types on all
machines (that's what the ANSI C standard proposes and assumes anyway).

In order to achieve this, it automatically determines the number of bits
in a machine word on your system and then adjusts its internal configuration
constants accordingly.

The greater the size of this basic storage unit, the better the complexity
(= execution speed) of the methods in this module, but also the greater the
average waste of unused bits in the last word.

Important note:
---------------

Note that the C library at the core of this module ("BitVector.c") can
also be used stand-alone (i.e., without Perl).

To do so, link the output file "BitVector.o" (which is produced when you
build this module or when you just compile "BitVector.c") with your
application.

Example applications:
---------------------

See the module "Set::IntegerRange" for an easy-to-use module for sets
of integers.

See the module "Math::MatrixBool" for an implementation of boolean
matrices.

(Both modules are also available from my web site or any CPAN server)

A tool relying crucially on this "Bit::Vector" module is "Slice" (see
also "http://www.engelschall.com/sw/slice/"), a tool for generating
different document versions out of a single master file. (This tool
was written by Ralf S. Engelschall).

This tool is itself part of another tool (by the same author), "WML"
(= "Website Meta Language"), which allows you to generate and maintain
large web sites (see also "http://www.engelschall.com/sw/wml/"). Among
many other features, it allows you to define your own HTML tags which
will be expanded either at generation or at run time, depending on your
choice.

New features in version 5.0:
----------------------------

In version 5.0b1, the following new methods have been added:

  -  Word_Bits()
  -  Long_Bits()
  -  Primes()
  -  Interval_Copy()
  -  Interval_Substitute()
  -  to_Bin()
  -  from_bin()
  -  to_Dec()
  -  from_dec()
  -  Insert()
  -  Delete()
  -  add()
  -  subtract()
  -  Negate()
  -  Absolute()
  -  Sign()
  -  Multiply()
  -  Divide()
  -  GCD()
  -  Block_Store()
  -  Block_Read()
  -  Word_Size()
  -  Word_Store()
  -  Word_Read()
  -  Word_List_Store()
  -  Word_List_Read()
  -  Word_Insert()
  -  Word_Delete()
  -  Chunk_Store()
  -  Chunk_Read()
  -  Chunk_List_Store()
  -  Chunk_List_Read()
  -  Index_List_Store()
  -  Index_List_Read()
  -  Transpose()

In version 5.0b2, the following new methods have been added:

  -  Index_List_Remove()
  -  Concat
  -  Concat_List
  -  Reverse
  -  Interval_Reverse

Please see the "Bit::Vector" man page (after installing this module)
for more details about these new methods.

The following methods have been re-implemented in C (instead of Perl):

  -  Version()
  -  Shadow()
  -  Clone()
  -  to_Enum()       (previously named "to_ASCII")
  -  from_enum()     (previously named "from_ASCII")

The following methods have been renamed:

  -  to_String()      -->    to_Hex()
  -  from_string()    -->    from_hex()
  -  to_ASCII()       -->    to_Enum()
  -  from_ASCII()     -->    from_enum()

(Aliases for the old names are still available but deprecated!)

And finally, the following methods are gone:

  -  lexorder()
  -  new_from_String()

A patch utility is available in the module's distribution to upgrade your
existing applications and to provide substitutes for the two methods that
are gone.

Legal issues:
-------------

This package with all its parts is

Copyright (c) 1995, 1996, 1997 by Steffen Beyer. All rights reserved.

Please read the file "LICENSE" in the module's distribution for details
about the exact terms under which this package may be used and distributed.

Prerequisites:
--------------

Perl version 5.000 or higher, a C compiler capable of the ANSI C standard (!)
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Author's note:
--------------

If you have any questions, suggestions or need any assistance, please
let me know!

Also, if there is anything you would like to do with this module which
the module doesn't provide yet, please let me know! If it fits the module's
overall concept, I'll implement it as soon as possible. Frequently this is
only a matter of a few days.

I hope you will find this module beneficial!

Best Regards,
--
    Steffen Beyer <[email-masked]> http://www.engelschall.com/u/sb/
     "There is enough for the need of everyone in this world,
      but not for the greed of everyone." - Mahatma Gandhi
    >> Unsolicited commercial email goes directly to /dev/null <<