The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Net::BitTorrent::Storage::File;
{
    use Moose;
    use Moose::Util::TypeConstraints;
    our $MAJOR = 0.074; our $MINOR = 0; our $DEV = 1; our $VERSION = sprintf('%1.3f%03d' . ($DEV ? (($DEV < 0 ? '' : '_') . '%03d') : ('')), $MAJOR, $MINOR, abs $DEV);
    extends 'Net::BitTorrent::Storage::Node';
    has 'index' => (is       => 'ro',
                    isa      => 'Maybe[Int]',
                    required => 1
    );
    has 'length' => (is       => 'ro',
                     isa      => 'Int',
                     required => 1
    );
    has 'offset' => (is      => 'ro',
                     isa     => 'Int',
                     default => 0
    );
    has 'priority' => (is      => 'rw',
                       isa     => subtype(as 'Int' => as enum([0 .. 15])),
                       default => 8
    );
    around 'read' => sub ($$;$$) {
        my ($code, $self, $offset, $length) = @_;
        $offset //= 0;
        $length //= $self->length - $offset;
        return if $length + $offset > $self->length;
        return $code->($self, $offset, $length);
    };
    around 'write' => sub ($$$$) {
        my ($code, $self, $offset, $data) = @_;
        return
            $self->storage->cache->add_block($self->index,
                                             $self->offset + $offset, $data)
            if $self->priority == 0;
        return if length($data) + $offset > $self->length;
        return $code->($self, $offset, $data);
    };
}
1;

=pod

=head1 Author

Sanko Robinson <sanko@cpan.org> - http://sankorobinson.com/

CPAN ID: SANKO

=head1 License and Legal

Copyright (C) 2008-2010 by Sanko Robinson <sanko@cpan.org>

This program is free software; you can redistribute it and/or modify it under
the terms of
L<The Artistic License 2.0|http://www.perlfoundation.org/artistic_license_2_0>.
See the F<LICENSE> file included with this distribution or
L<notes on the Artistic License 2.0|http://www.perlfoundation.org/artistic_2_0_notes>
for clarification.

When separated from the distribution, all original POD documentation is
covered by the
L<Creative Commons Attribution-Share Alike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/us/legalcode>.
See the
L<clarification of the CCA-SA3.0|http://creativecommons.org/licenses/by-sa/3.0/us/>.

Neither this module nor the L<Author|/Author> is affiliated with BitTorrent,
Inc.

=for rcs $Id: File.pm 62b27d0 2010-09-05 04:22:11Z sanko@cpan.org $

=cut