Revision history for Perl extension Set::Infinite. 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() / _no_cleanup() 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 - 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