Tie::Queue - Introduction
      Tie::Queue - Tie an ARRAY over a TokyTyrant  DB ( see http://tokyocabinet.sourceforge.net )

SYNOPSIS
      use Tie::Queue;
      use Data::Dumper;

      ## Queue creation
      # This queue is not re-initialised at each execution of the script
      # the default namespace is 'Tie-Queue'
      # and each item are non serialized 
      tie my @a, 'Tie::Queue', '127.0.0.1', 1978, 0;

      # This queue is NOT re-initialised at each execution of the script
      # and each item are non serialized 
      # the namespace is 'second_queue'
      tie my @b, 'Tie::Queue', '127.0.0.1', 1978, 1 , 0 , 'second_queue';

      ## put some data in the queue
      for ( 101 .. 110 )
      {
          push @a, $_;
      }

      for ( 1001 .. 1005 )
      {
          push @ab, $_;
      }

      push @b, 'some text';
      push 
      ## show the content of the queue
      print Dumper( \@a );
      ## print the size of the queue
      print "size of array=". scalar @a. "\n";
      ## remove the latest pushed element from the queue ( the newest)
      $res1 = pop @a;
      print  "latest element $res1\n";
      print "size of array=". scalar @a. "\n";
      print Dumper( \@a );
      $res2 = $a[3];
      print  "element 3 = $res2\n";
      ## remove the first element from the queue ( the oldest )
      $res3 = shift @a;
      print  "first element $res3\n";
      print "size of array=". scalar @a. "\n";
      print Dumper( \@a );
      if ( exists $a[4] )
      {
          print "elem 4 exists\n";
      }
      else
      {
          print "elem 4 NOT exists\n";
      }

      if ( exists $a[40] )
      {
          print "elem 40 exists\n";
      }
      else
      {
          print "elem 40 is NOT existing\n";
      }


      (tied @a)->CLEAR;
      print "size of array=". scalar @a. "\n";

      ########################
      # this queue is re-initialised at each execution of the script
      # and each item are serialized 
      # and the name space is 'third_queue_serialized'
      tie my @c, 'Tie::Queue', '127.0.0.1', 1978, 1 , 1 , 'third_queue_serialized';
      my %test = ( a => 'key_a', b => 'key_B' , c => 3 );
      print Dumper(\%test);
      push @d , \%test;
      my $r = pop @d;
      print Dumper($r)
      #######################

DESCRIPTION
      Tie an ARRAY over a TokyTyrant DB and allow to push, pop shift  data;
  
      This module require TokyoTyrant (database and perl module.)
      If the serialisation is required, the module Data::Serilizer is also required
  
      The normal ARRAY function present are
  
      push
      pop
      shift
      exists
      scalar
      storesize ( to allow undef @a)
  
      Specific function
  
      CLEAR
      SYNC
      REPAIR
  
      The following function are not implemented.
  
      EXTEND
      STORE
      DELETE
      SPLICE

Basic functions
    * only the queue relevant functions are present *

  tie
            Tie an array over a DB
            my $t = tie( my @myarray, "Tie::Queue", '127.0.0.1', 1978, 1 , 1 , 'first_name' ,  1 , 0 );
        
            Six optional parameter are allowed
                1) the IP where the TokyoTyrant is running ( default 127.0.0.1 )
                2) the port on which the TokyoTyrant is listenning ( default 1978 )
                3) a flag to delete at start the DB ( default 0 )
                4) a flag to serialize/deserialize on the fly the data stored in the DB
                5) a namespace to allow more than one queue on the same DB ( default Tie-Queue )
                6) a flag to activate or deactivate auto_sync ( default 1 )
                7) a flag to prevent undef value to be pushed ( default 0 )
                8) a flag to use self-healing feature or reset a queue if the data queue is corrupted ( default 0 )
                9) a flag to add some debug info on correctable error ( default 0 )
               10) a flag to prevent insertion of duplicate value ( default 0 )

  PUSH
            Add an element at the end of the array
            push @myarray , 45646;

  POP
            Extract the latest element from the array ( the newest )
            my $data = pop @myarray;

  SHIFT
            Extract the first element from the array  ( the oldest )
            my $data = shift @myarray;

  EXISTS
            Test if an element in the array exist
            print "element exists\n" if (exists $myarray[5]);

  FETCH
            Retrieve a specific element from the array
            my $data = $myarray[6];

  FETCHSIZE
            Get the size of the array
            my $data = scalar(@myarray);

  SYNC
            Force a sync of the DB ( not usefull is auto_sync is on)
            $t->SYNC;

  CLEAR
            Delete all element in the array
            $t->CLEAR;

  DESTROY
            Normal destructor call when untied the array
            Normaly never called by user

  REPAIR
            Force a rescan of all elements in the queue and recreate the right indexes

Functions not Implemented
    * Most of then are not related to a QUEUE *

  UNSHIFT
            Not implemented

  EXTEND
            Not implemented

  STORE
            Not implemented

  STORESIZE
            to  resize the array ( this allow a re-initialisation of the array by undef @a )

  DELETE
            Not implemented

AUTHOR
            Fabrice Dulaunoy <fabrice_at_dulaunoy_dot_com>

SEE ALSO
            - TokyoTyrant from Mikio Hirabayashi <mikio_at_users_dot_sourceforge_dot_net>

TODO
            - make test

LICENSE
            Under the GNU GPL2

            This program is free software; you can redistribute it and/or modify it 
            under the terms of the GNU General Public 
            License as published by the Free Software Foundation; either version 2 
            of the License, or (at your option) any later version.

            This program is distributed in the hope that it will be useful, 
            but WITHOUT ANY WARRANTY;  without even the implied warranty of
            MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
            See the GNU General Public License for more details.

            You should have received a copy of the GNU General Public License 
            along with this program; if not, write to the 
            Free Software Foundation, Inc., 59 Temple Place, 
            Suite 330, Boston, MA 02111-1307 USA

            Tie::Queue  Copyright (C) 2009 DULAUNOY Fabrice  
            Tie::Queue comes with ABSOLUTELY NO WARRANTY; 
            for details See: L<http://www.gnu.org/licenses/gpl.html> 
            This is free software, and you are welcome to redistribute 
            it under certain conditions;

