Name
    Binary::Heap::Array - Extensible array each of whose component arrays is
    an integral power of two wide.

Synopsis
      my $a = Binary::Heap::Array::new(ipsw);

      $a->push(1)->push(2);
      ok $a->size   == 2;
      ok $a->at( 0) == 1;
      ok $a->at( 1) == 2;
      ok $a->at(-1) == 2;
      ok $a->at(-2) == 1;
         $a->at( 0)  = 2;
      ok $a->at(-2) == 2;
      ok $a->pop    == 2;
      ok $a->size   == 1;
      ok $a->shift  == 2;
      ok $a->size   == 0;
      $a->unshift(3);
      ok $a->size   == 1;
      $a->unshift(2);
      ok $a->size   == 2;
      $a->unshift(1);
      ok $a->size   == 3;

Methods
  new($flags)
    sub new(*) # Create a new binary heap array. A string of flags enables
    optimizations to the base version, which uses the minimum amount of
    memory at all times, to use more memory to obtain shorter run times,
    These flags are: 'i' - retain memory for subsequent reuse rather than
    freeing it as soon as possible; 'p' - add two fields to each array to
    optimize shift/unshift operations; 's' - add a field to each array to
    cache the size of the array; 'w' - add a field each array to cache the
    current width of the array of subarrays.

         Parameter  Description
      1  $flags     Optimization flags ipsw in any order surrounding quotes are not necessary

  at :lvalue($array, $index)
    Address the element at a specified index so that it can get set or got

         Parameter  Description
      1  $array     Array
      2  $index     index of element

  pop($array)
    Pop the topmost element from the leading full array and spread the
    remainder of its contents as sub arrays of the correct size for each
    preceding empty slot

         Parameter  Description
      1  $array     Array from which an element is to be popped

  push($array, $element)
    Push a new element on to the top of the array by accumulating the
    leading full sub arrays in the first empty slot or create a new slot if
    none already available

         Parameter  Description
      1  $array     Array
      2  $element   element to push

  size($array)
    Find the number of elements in the binary heap array

         Parameter  Description
      1  $array     Array

  shift($array)
    Remove and return the current first element of the array

         Parameter  Description
      1  $array     Array

  unshift($array, $element)
    Insert an element at the start of the array

         Parameter  Description
      1  $array     Array
      2  $element   element to be inserted

Index
    "at :lvalue($array, $index)" "new($flags)" "pop($array)" "push($array,
    $element)" "shift($array)" "size($array)" "unshift($array, $element)"

Installation
    This module is written in 100% Pure Perl in a single file and is thus
    easy to read, modify and install.

    Standard Module::Build process for building and installing modules:

      perl Build.PL
      ./Build
      ./Build test
      ./Build install

See also
    The arrays used to construct the binary heap array are all an integral
    power of two wide and thus make good use of the memory allocated by
    Data::Layout::BuddySystem or similar.

Author
    philiprbrenan@gmail.com

    http://www.appaapps.com

Copyright
    Copyright (c) 2017 Philip R Brenan.

    This module is free software. It may be used, redistributed and/or
    modified under the same terms as Perl itself.

