The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
#
# $Header: /Users/claude/fuzz/lib/Genezzo/PushHash/RCS/PHFixed.pm,v 7.1 2005/07/19 07:49:03 claude Exp claude $
#
# copyright (c) 2003, 2004 Jeffrey I Cohen, all rights reserved, worldwide
#
#
use strict;
use warnings;

package Genezzo::PushHash::PHFixed;

#use Genezzo::Util;
use Genezzo::PushHash::PushHash;
use Carp;
use warnings::register;

our @ISA = qw(Genezzo::PushHash::PushHash) ;

sub _init
{
    #whoami;
    #greet @_;
    my $self = shift;

    my %args = (
                @_);

    $self->{ __PACKAGE__ . ":ROWCOUNT"} = 0;

    return 1;
}

sub TIEHASH
{ #sub new 
    #greet @_;
    my $invocant = shift;
    my $class = ref($invocant) || $invocant ; 
    my $self = Genezzo::PushHash::PushHash->TIEHASH(@_);

    my %args = (@_);

    return undef
        unless (_init($self,%args));

    return bless $self, $class;

} # end new

our $MAXCOUNT = -1;

sub HPush
{
    if ($MAXCOUNT > 1)
    {
        unless ($_[0]->{ __PACKAGE__ . ":ROWCOUNT"} < $MAXCOUNT)
        {
            carp "Count $MAXCOUNT exceeded"
                if warnings::enabled();
            return (undef);
        }
    }
    
    $_[0]->{ __PACKAGE__ . ":ROWCOUNT"} += 1;
    
    return $_[0]->SUPER::HPush($_[1]);
}

sub DELETE   
{ 
    my $retval = $_[0]->SUPER::DELETE($_[1]);

    $_[0]->{ __PACKAGE__ . ":ROWCOUNT"} -= 1
        if (defined($retval));

    return ($retval);
}

sub CLEAR    
{ 
    my $retval = $_[0]->SUPER::CLEAR();
    $_[0]->{ __PACKAGE__ . ":ROWCOUNT"} = 0
        if (defined($retval));

    return ($retval);

}

1;

__END__

# Below is stub documentation for your module. You better edit it!

=head1 NAME

Genezzo::PushHash::PHFixed - fixed-size push hash

=head1 SYNOPSIS

=head1 DESCRIPTION

=head1 ARGUMENTS

=head1 FUNCTIONS

=head2 EXPORT

=head1 LIMITATIONS

various

=head1 #TODO

=over 4

=back

=head1 AUTHOR

Jeffrey I. Cohen, jcohen@genezzo.com

=head1 SEE ALSO

L<perl(1)>.

Copyright (c) 2003, 2004 Jeffrey I Cohen.  All rights reserved.

    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
    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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

Address bug reports and comments to: jcohen@genezzo.com

For more information, please visit the Genezzo homepage 
at L<http://www.genezzo.com>

=cut