Revision history for Perl extension Set::Infinite.

0.65 2010-04-26
- documentation fix

0.64 2010-04-26
- s/simmetric/symmetric/
reported by Richard Jelinek

0.63 2008-07-21
- minor tweak in union(); added tests

0.62 2008-07-20
- fixed a problem in union() that caused first() to return a wrong result. reported by David Gang

0.61 2004-11-03
- some optimization of intersected_spans() - bugfix: complement of the universal set is the empty set

0.60 2004-10-28
- _cleanup() / nocleanup() are obsolete - easier syntax to iterate()

0.59 2004-07-01
- added experimental argument "backtrack_callback" to iterate()

0.58 2004-06-14
- intersected_spans was wrong when intersecting with an open set. bug report & tests by Peter Oliver

0.57 2004-04-03
- CPAN update

0.5602 2004-03-25
- fixed a test in t/select.t - Reported by David Dyck. - simplified "offset"; fixed "fixtype"
- added "separators" test in t/infinite.t - is_proper_subset / is_disjoint may return 'undef' - variables $a, $b renamed

0.5601 2004-03-20
- iterate() first/last can deal with multiple spans - removed todo: "provide a constructor to build open sets" because this is already documented in new(). - fixed "separators" OO
- New methods:
is_span
is_singleton
is_subset
is_proper_subset
is_disjoint
universal_set
empty_set
minus / difference (same as "complement") simmetric_difference

0.56 2004-03-17
- New method: clone (same as "copy")
- More tests & fixes: intersected_spans

0.5503 2004-03-15
- New method: intersected_spans
Suggested by Reinhold May
Name suggested by Dave Rolsky
- bugfix: first/last() of a union will try harder not to split spans.

0.5502 2004-03-14
- New methods: start_set / end_set
These are the inverse of the "until" method. Suggested by Reinhold May

0.5501

refactored _backtrack method

0.55 2003-11-16

0.5401 2003-10-21

specifying start > end in a constructor is a fatal error.

0.54
0.5308 2003-10-16

clears mod_perl warnings - change the order of modules and constants. Patch by Dan Kubb

0.5307

backtracking "iterate" uses a larger span

0.5306

fix bug in test "inf" -> "$inf". Thanks Kingpin

0.5305

%_first and %_last are declared with 'use vars'

0.5304

added more tests: intersects/until/select optimized select()
refactored quantize()

0.5303

removed Set::Infinite::Date
removed /_eg directory
simplified README

0.5302

select( freq => $n ) is removed.

0.5301

refactored methods: min, max, first, last, until, iterate, offset removed obsolete method: compact
renamed internal methods with _underline removed obsolete 'date' docs

0.53 2003-09-05

fixes a test that fails under 5.00503 does not export 'new'

0.52 2003-09-04

change tests to run under (a broken) Perl 5.9.0

0.51 2003-09-02

passes all tests under 5.00503.

0.50

count()
fixed: size() does not try to add 'zero' to object. tests for count() and size()

0.49

fixed: "first/last" of intersection between recurrences

0.48

fixed: backtracking on a partially defined set. fixed: first of a union with an empty set.

0.47

until allows start_set == end_set

0.46_01

upload to perl-date-time CVS

0.46

more docs

0.45

last works, but not for union/quantize/select/offset 0.44_03

last() can union/intersect/complement/offset 0.44_02

last() can iterate/complement
0.44_01

first(n) deprecated
S::I::Basic::last() enabled

0.44

CPAN release

0.43_01

'iterate' generates 'first' code

0.43

CPAN release
implemented max() of 'iterate'

0.42_05

implemented min() of 'iterate'
fixed complex union with empty set

0.42_04

finished removing 'our'

0.42_03 / 0.42_02

(idem)

0.42_01

more methods inherited from Set::Infinite::Basic

0.42_00

Set::Infinite.pm refactored into Set::Infinite::Basic Set::Infinite::_Simple removed.

0.41_03

can intersects() to an object (it checks the reference type)

0.41_02

fixed copy() - copying array refs

0.41_01

Fixed type() inheritance problems
as a side effect, type() must be called with '->' syntax Fixed eg/recurring.pl

0.41

'todo' directory renamed to _todo for Win* compatibility (clashes with TODO)

0.40

LICENSE file

0.39_05

fixed 'until' test warnings (caused by malformed offset() output)

0.39_04

'until' works with empty sets
'until' has first()

0.39_03

'until' backtracks (slowly)
left a hack in max() - might remove it when last() works...

0.39_02

'offset' has 'first'
'until' has 'quantizespan'

0.39_01

new method 'until' -- makes it possible to join RRULEs in Date::Set::Timezone hacked a fix a problem when offset-begin backtracks (offset-begin reduces

        a set to a single element, which backtracks wrongly if the set were
        quantized)

better handling of backtrack-offset values fixed spaceship (again)
contains works better for unbounded sets

0.39

fixed a bug in spaceship() that affected Date::Set::Timezone

0.38 - changes to 0.37:

new method first()
min() and max() improved
fixed some bugs: intersection -inf with (-inf..15); "<=>"; more tests new $PRETTY_PRINT global option; better TRACE about 20% faster than 0.37; uses less memoization

0.37_71

trace works on a copy of the variables, so that autovivification

and cleanups don't interfere with the program.

0.37_69

new method quantizespan helps some internal calculations

0.37_68

fixed a bug in intersection -inf with (-inf..15)

0.37_67

t/first.t passes all tests
first-select is leaking

0.37_63

last-quantize started

0.37_62

all tests pass
fixed Element_Inf dependency in Set::Infinite::Date.pm

0.37_61

tests pass
select should use count=> to bound set

0.37_60

first/unknown/union recursion fixed

0.37_59

first() has a cache

0.37_57

new $PRETTY_PRINT global option

0.37_54

quantize() is 'first-compatible'

0.37_51

min is 'more exact'
first-intersection uses limited recursion

0.37_49

trace() has 'tab-levels' - trace_open/trace_close

0.37_48

first complement/intersection works last() removed

0.37_47

started last()
started first/last + complement
new t/first.t

0.37_44

fixed a bug in <=>

0.37_43

first/intersection code started (commented out)

0.37_42

allows inherited methods to use first()

0.37_41

passes tests

0.37_40

select/first works with freq+count or count

(some tests fail)

0.37_38

first works for union/select/quantize

0.37_37

first for union()

0.37_36

select() freq default is 1 if we have a count

0.37_35

first/tail works for quantize(), select(by[])

0.37_26

compact() is a no-op

0.37_23

quantize() is no longer tied; no longer generates 'undef'

        subset values.
        3 tests didn't pass; removed! (expected null subset values)

Quantize_Date.pm removed
Function.pm removed

0.37_19

removed global-cache in quantize (access was too difficult,

took too much time).

0.37_18

removed cacheing in Set::Infinite::Date (problems with 'mode'

internal variable).

0.37_16

quantize 'weekyears' internal indexes fixed

new tests added

0.37_11

Set::Infinite::Arithmetic docs revised

0.37_10

select() is no longer "tied"
lib\Set\Infinite\Select.pm removed. offset doesn't use gmtime if doesn't have to.

0.37_06

Backtracks on complement()
EXCLUDE_EXT string/array correction in Makefile.PL

(thanks Mark Veltzer for pointing this out)

0.37_05

Offset.pm moved into Arithmetic.pm

0.37_04

removed eg/ical.pl

(thanks Mike Castle for pointing these out) changed obsolete 'add' method to 'union' in eg/*.pl removed null() docs

0.37_03

faster Offset.pm

0.37
0.36_50

use warnings in Set::Infinite::_Simple

0.36_49

remove module Set::Infinite::Element_Inf

0.36_48

uses native "Infinity" stringification

0.36_47

fixed some warnings

0.36_46

size return correct value for open integer sets intersects/contains return undef if too_complex

0.36_45

min/max are cached
min/max work with union/intersection

select(), complement() not implemented (should carp!)

0.36_43

integer/real/tolerance are functions min/max work with integer()

0.36_42

min/max work for offset();

0.36_41

min/max fixed for quantize()

t/backtrack.t tests 2,3 fixed; more tests new methods (undocumented):

min_a(), max_a() return a list: (value, open-state)

0.36_40

internal inf == Perl Inf

0.36_36

complement backtracks, although not it might fail for some sets

(not tested at all!)
min/max/span/size are estimated for complex sets

might work for select() too.
list(), <=> carp for unbounded sets

0.36_11

backtrack method call is cleaner

0.36_10

simpleintersection removed.
simplecomplement with parameter removed.

0.36_09

offset strict option removed. Was never used.

0.36_08

Set::Infinite::ICalset and S::I::ICal removed. use Date::Set instead.

0.36_07

Simple class renamed to _Simple; creates methods inside Set::Infinite $self->new() creates an empty set, and copies private variables

from $self. This makes new() inheritance easier.

0.36

added 'copy' in order to allow 'subroutine-style' programming instead of only 'functional' programming added 'is_too_complex'
obsoleted modules: Set::Infinite::Date, Set::Infinite::ICal, Set::Infinite::ICalSet use Date::Set instead.
added make_htmldoc.pl and make_readme.pl

0.34

added 'weekdays' option to 'offset'

0.31-0.33

some optimizations
offset is no longer 'tied' in order to try to make it faster offset now always return an ordered set quantize has better memoization control

0.30

        optimized 'is_null' - avoids converting data to string
        fixed examples - foreach needs ->list
        fixed tests - thanks CPAN testers!
        move 'type', 'tolerance', 'real', 'integer' from Simple.pm to Set::Infinite.pm
        simpler 'contains'
        removed tie code from Infinite.pm and Infinite::Simple.pm

0.29

        new method 'compact'
        offset option 'mode=>circle'
        new method 'list'
        new method 'no_cleanup'

        offset can handle months, years
        offset value must be array with even number of elements

        select 'freq' default is set-size instead of 1.

        removed internal 'compact_array' 

        join (" ", $a) no longer works. use join (" ", $a->list) instead.

        quantize(10) no longer works. use quantize(quant=>10) instead.
        ical_2: BYMONTHDAY did not instantiate in ical_2 unless 'print'
          -- offset can't return array.

0.28

        'strict' option in offset, select.
        'strict=>0' option in quantize.

        offset can handle 'negative counts from end'

0.27

        offset 'value' can handle multiple value-pairs
        optimized $class->new() instead of $class->new($self) in select, offset, quantize.

0.26

        lots of problems due to $a->{list}->[$ia]->{a} 
        -- used a temp variable to split in smaller parts

        new eg/ical.pl oo demo

        marked 'select{interval}' option to be deleted in next release
        select now properly handles negative by[]; checks parent index boundaries
        masked errors in select by using a dummy variable.
 
        cache Quantize_Date::FETCH (local to object)
        user can 'push' new methods into 'quantize'

        new 'iterate' method

        better oo in Infinite.pm - most methods can now be overriden
        array syntax corrected in Infinite.pm
        new TRACE/trace and DEBUG_BT to help debug

0.25

        backtracking fully implemented in: intersection, intersects, union, offset. 
        backtracking partially implemented in: quantize, select
        backtracking is NOT implemented in: complement, size, span, max, min
        See: backtrack.t

        'epoch' support in core module. Doesn't need Date or ICal.

        intersection was missing 'my $b;'

        Date::sub propagates {mode}

        use hash-subs to initialize quantize units
        'quantize_date' uses 'one' as default unit
        doesn't use Quantize.pm anymore, since Quantize_Date.pm is a superset.
        doesn't need 'quantizer, selector, offsetter' either.

        remove 'cmp' (thanks Martijn)
        internal cache for Date and ICal object

0.24

        offset has 'unit' parameter
        'epoch' removed. use 0+ instead.
        Quantize_Date is an extension of Quantize.
        quantize, select, offset return a compact array of Set::Infinite instead of a sparse array of Set::Infinite::Simple
                - no longer needs to test for null elements.

0.23

        changed localtime to gmtime everywhere
        new object type: ICal. Requires Date::ICal; marked as experimental
                This module will not be tested if it can't find Date::ICal
        new date method: epoch

0.22.05

        doesn't need HTTP::Date
        offset supports hours, in 'Date' type

        put "eg/recurring.pl" in distribution. (should be there since 0.21)
        new "Function.pm" base class for functions.
        Used Funtion.pm for "Select.pm" and "Offset.pm" 
        Much better algorithm for "Select.pm"
        stricter language for "quantize" - only hash allowed.
        reduced "Simple.pm" - may be deprecated someday

        Faster cleanup, max, min
        Cleaner (faster?) union

0.21

        new methods: "select" and "offset".
        syntax changed: "quantize":
                quantize( 1 );   # old syntax, still works
                quantize( quant => 1 );
                quantize( 'months', 1 );   # old syntax for quantize_date, still works
                quantize( unit => 'seconds', quant => 1 ); # quantize_date
        internal: quantize parameter order is different.
        fixed: Quantize_Date returned Set::Infinite instead of Set::Infinite::Simple
        fixed: Date::Add lost format
        new: Set::Infinite::Date::day_size()
        added: recursive test for quantize
        changed: empty return value for quantize is "null" instead of ""; then
                changed "null" name to "" :)

0.20

local "type"

0.18, 0.19

        Set::Infinite::Element not used anymore.
        2.3x speed improvement in tests over version 0.14.

0.17

        Correction in Simple.pm line-ending, and TODO filename on Windows
        Element_Inf and Date.pm test for undefined parameters on OpenBSD

0.16

40% speed improvement in tests over version 0.14.

0.15

        20% speed improvement in tests over version 0.14.
        bigint.t fails; moved to 'todo' directory.
        `Date' fails in OpenBSD. Doesn't fail in linux or Windows.

0.14

        Problems with Bigfloat tests - can't fix them. Moved to `todo' directory.
        Fixed Bigint tests and warnings in other tests.

0.13

        Simple.pm and Element.pm:Corrected
         many warnings related to testing undef values on hash

        Quantize.pm and Quantize_Date.pm
        work on real sized chunks too - don't use `%' integer module operation.

        Infinite.pm 
        quantize returns tied array. It can be used directly with `foreach'.
        Pod and tests corrected.

        Infinite.pm
        Accepts slices as input. There are syntax problems - see "CAVEATS" in pod.
        tests added.

        Simple.pm
        Will not cleanup if acessed as tied array, until both a and b are defined or a method is called,
        so that we can set a, then b.

0.12

        Correction in Set::Infinite::Simple::intersection
        [5..5) is null

        New function: quantize

0.11

        Set::Infinite
        Copyright message

        Set::Infinite Line 8:
        # use AutoLoader qw(AUTOLOAD);

        Deep recursion on subroutine "Set::Infinite::add" at h:/util/Perl/site/lib/Set/Infinite.pm line 318.
        Deep recursion on subroutine "Set::Infinite::Simple::new" at h:/util/Perl/site/lib/Set/Infinite.pm line 184.
        solution: 
        Set::Infinite::Element->type and
        Set::Infinite::Date->date_format
        use `pop' instead of `shift', or read parameters

0.01 Mon May 14 14:43:09 2001