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/SpaceMan/RCS/SMFreeBlock.pm,v 1.3 2007/02/05 05:48:33 claude Exp claude $
#
# copyright (c) 2006, 2007 Jeffrey I Cohen, all rights reserved, worldwide
#
#
package Genezzo::SpaceMan::SMFreeBlock;

use strict;
use warnings;

use Carp;
use Genezzo::Util;

BEGIN {
    use Exporter   ();
    our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);

    # set the version for version checking
#    $VERSION     = 1.00;
    # if using RCS/CVS, this may be preferred
    $VERSION = do { my @r = (q$Revision: 1.3 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker

    @ISA         = qw(Exporter);
    @EXPORT      = ( ); # qw(&NumVal);
    %EXPORT_TAGS = ( );     # eg: TAG => [ qw!name1 name2! ],

    # your exported package globals go here,
    # as well as any optionally exported functions
#    @EXPORT_OK   = qw($Var1 %Hashit &func3 &func5);
    @EXPORT_OK   = (); 

}

our $GZERR = sub {
    my %args = (@_);

    return 
        unless (exists($args{msg}));

    if (exists($args{self}))
    {
        my $self = $args{self};
        if (defined($self) && exists($self->{GZERR}))
        {
            my $err_cb = $self->{GZERR};
            return &$err_cb(%args);
        }
    }

    my $warn = 0;
    if (exists($args{severity}))
    {
        my $sev = uc($args{severity});
        $sev = 'WARNING'
            if ($sev =~ m/warn/i);

        # don't print 'INFO' prefix
        if ($args{severity} !~ m/info/i)
        {
            printf ("%s: ", $sev);
            $warn = 1;
        }

    }
    # XXX XXX XXX
    print __PACKAGE__, ": ",  $args{msg};
#    print $args{msg};
#    carp $args{msg}
#      if (warnings::enabled() && $warn);
    
};


sub _init
{
    #whoami;
    #greet @_;
    my $self     = shift;
    my %required = (
                    blocknum        => "no blocknum !",
                    current_extent  => "no extent !",
                    extent_size     => "no extent size !",
                    extent_position => "no extent position!"
                    );

    my %optional = (
                    firstextent => 0,
                    newextent => 0
                    );
    
    my %args = (%optional,
                @_);

    return undef
        unless (Validate(\%args, \%required));

    $self->{blocknum}        = $args{blocknum};
    $self->{current_extent}  = $args{current_extent};
    $self->{extent_size}     = $args{extent_size};
    $self->{extent_position} = $args{extent_position};
    $self->{firstextent}     = $args{firstextent};
    $self->{newextent}       = $args{newextent};

    return 1;

}

sub new 
{
    my $invocant = shift;
    my $class = ref($invocant) || $invocant ; 
    my $self = { };
    
#    whoami @_;
    my %args = (@_);
    return undef
        unless (_init($self,%args));

    if ((exists($args{GZERR}))
        && (defined($args{GZERR}))
        && (length($args{GZERR})))
    {
        # NOTE: don't supply our GZERR here - will get
        # recursive failure...
        $self->{GZERR} = $args{GZERR};
    }

    my $blessref = bless $self, $class;

    return $blessref;

} # end new

sub GetBlocknum
{
    my $self = shift;

    return $self->{blocknum};
}

sub GetCurrentExtent
{
    my $self = shift;

    return $self->{current_extent};
}
sub GetExtentSize
{
    my $self = shift;

    return $self->{extent_size};
}
sub GetExtentPosition
{
    my $self = shift;

    return $self->{extent_position};
}

sub IsNewExtent
{
    my $self = shift;

    return $self->{newextent};
}

sub IsFirstExtent
{
    my $self = shift;

    return $self->{firstextent};
}


1;  # don't forget to return a true value from the file

__END__

=head1 NAME

Genezzo::SpaceMan::SMFreeBlock.pm - FreeBlock Space Management

=head1 SYNOPSIS

 use Genezzo::SpaceMan::SMFreeBlock;

=head1 DESCRIPTION

SMFreeBlock is a data structure which describes the basic space
objects associated with each block.

=head1 FUNCTIONS

=over 4

=item GetBlocknum

=item GetCurrentExtent

=item GetExtentSize

=item IsNewExtent

=item IsFirstExtent

=back


=head2 EXPORT

=head1 TODO

=over 4

=item Under Construction

=back



=head1 AUTHOR

Jeffrey I. Cohen, jcohen@genezzo.com

=head1 SEE ALSO

perl(1), L<Genezzo::SpaceMan::SMFile>, L<Genezzo::SpaceMan::SMExtent>.

Copyright (c) 2006, 2007 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