# NAME

Set::Infinite::_recurrence - Extends Set::Infinite with recurrence functions

# SYNOPSIS

``    \$recurrence = \$base_set->_recurrence ( \&next, \&previous );``

# DESCRIPTION

This is an internal class used by the DateTime::Set module. The API is subject to change.

It provides all functionality provided by Set::Infinite, plus the ability to define recurrences with arbitrary objects, such as dates.

# METHODS

• _recurrence ( \&next, \&previous )

Creates a recurrence set. The set is defined inside a 'base set'.

``   \$recurrence = \$base_set->_recurrence ( \&next, \&previous );``

The recurrence functions take one argument, and return the 'next' or the 'previous' occurrence.

Example: defines the set of all 'integer numbers':

``````    use strict;

use Set::Infinite::_recurrence;
use POSIX qw(floor);

# define the recurrence span
my \$forever = Set::Infinite::_recurrence->new(
Set::Infinite::_recurrence::NEG_INFINITY,
Set::Infinite::_recurrence::INFINITY
);

my \$recurrence = \$forever->_recurrence(
sub {   # next
floor( \$_ + 1 )
},
sub {   # previous
my \$tmp = floor( \$_ );
\$tmp < \$_ ? \$tmp : \$_ - 1
},
);

print "sample recurrence ",
\$recurrence->intersection( -5, 5 ), "\n";
# sample recurrence -5,-4,-3,-2,-1,0,1,2,3,4,5

{
my \$x = 234.567;
print "next occurrence after \$x = ",
\$recurrence->{param}->( \$x ), "\n";  # 235
print "previous occurrence before \$x = ",
\$recurrence->{param}->( \$x ), "\n";  # 234
}

{
my \$x = 234;
print "next occurrence after \$x = ",
\$recurrence->{param}->( \$x ), "\n";  # 235
print "previous occurrence before \$x = ",
\$recurrence->{param}->( \$x ), "\n";  # 233
}``````
• is_forever

Returns true if the set is a single span, ranging from -Infinity to Infinity.

• _is_recurrence

Returns true if the set is an unbounded recurrence, ranging from -Infinity to Infinity.

# CONSTANTS

• INFINITY

The `Infinity` value.

• NEG_INFINITY

The `-Infinity` value.

# SUPPORT

Support is offered through the `datetime@perl.org` mailing list.

# AUTHOR

Flavio Soibelmann Glock <fglock@gmail.com>

The recurrence generation algorithm is based on an idea from Dave Rolsky.

Copyright (c) 2003 Flavio Soibelmann Glock. All rights reserved. This program is free software; you can distribute it and/or modify it under the same terms as Perl itself.

The full text of the license can be found in the LICENSE file included with this module.