Revision history for Perl extension Set::Infinite.

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 '_quantize_span'

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 _quantize_span 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
    _simple_intersection removed.
    _simple_complement 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
	- made Makefile.PL; v.0.010

