# NAME Data::RingBuffer - A simple ring buffer data structure # SYNOPSIS ```perl use Data::RingBuffer; my $rb = Data::RingBuffer->new(4); my $rb = Data::RingBuffer->new(4, { die_overflow => 1 }); $rb->push($obj1); $rb->push($obj2); $rb->push($obj3); $obj1 = $rb->get(); $obj2 = $rb->get(); $rb->push($obj4); $rb->push($obj5); # $obj1 removed from the buffer $obj3 = $rb->get(); my $objs = $rb->getall(); # [ $obj2, $obj3, $obj4, $obj5 ] ``` # DESCRIPTION Ring buffer data structure could be used in a various environments, demanding circular data storage or any kind of cyclic data caching. There is a good implementation of arrays in Perl, which supports elements addition in any direction. This module provides a simple wrapper over them. # SUBROUTINES ## new `$obj = Data::RingBuffer->new($size[, $hashref])` is an object constructor that will correctly initialize the object being created. - `$size` is a positive number of slots in the buffer. - `$hashref` _(optional)_ is a hash with optional parameters. - `die_overflow` causes croak if the buffer overflows. ## push `$obj->push($element)` adds an `$element` to the buffer. - `$element` is some scalar being inserted in the buffer. ## get Get next `$element` from the buffer. ## getall Get an arrayref of all the elements in the buffer. # AUTHOR Sergei Zhmylev, `` # BUGS Please report any bugs or feature requests to official GitHub page at [https://github.com/zhmylove/data-ringbuffer](https://github.com/zhmylove/data-ringbuffer). You also can use official CPAN bugtracker by reporting to `bug-data-ringbuffer at rt.cpan.org`, or through the web interface at [https://rt.cpan.org/NoAuth/ReportBug.html?Queue=Data-RingBuffer](https://rt.cpan.org/NoAuth/ReportBug.html?Queue=Data-RingBuffer). I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. # INSTALLATION To install this module, run the following commands: $ perl Makefile.PL $ make $ make test $ make install # LICENSE AND COPYRIGHT This software is Copyright (c) 2020 by Sergei Zhmylev. This is free software, licensed under: The Artistic License 2.0 (GPL Compatible)