Revision history for Perl extension Set::Infinite.

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
    - bug fix: $set = Set::Infinite->new( -10, 0 );
      created a set with "-10" instead of [-10..0]
    - documents that the parameters to new() must be sorted. 
      Reported by Jim Cromie

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. 
    - breaks Date::Set 0.28 (Date::Set 0.29 is ok)
    select( by => [] ) default is changed to 'All'.
    - in order to have the same behaviour as when 'freq' was omitted.

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
    - infinity string contains spaces

0.51    2003-09-02
    passes all tests under 5.00503.
    - changed ' $var=\@_ ' to ' $var=[@_] '
    compiles under Perl 5.00503.  Patch by Mathieu Arnold.

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