Changes for DateTime::Set

0.17    2004-08-17
- bugfix: it was trying to set the time zone of an "undef" value; 
  this has broken some DT::Event::Recurrence tests - reported by Bill Moseley

0.1603  2004-07-05
- revised documentation, some examples were rewritten.
- deprecate "iterate" method
- Build.PM requires Set::Infinite 0.59 - reported by Tim Muller-Seydlitz

0.1602  2004-07-02
- fixed time zone handling in the methods:
  set_time_zone
  next/previous/closest/current

- removed limitation of duration size in methods:
  add/add_duration
  subtract/subtract_duration

- requires Set::Infinite 0.59 - uses iterate() experimental 
  argument "backtrack_callback"

- the following methods are now mutators:
  set_time_zone( $tz )
  set( locale => $locale )
  add( unit => $n )
  add_duration( $dur )
  subtract( unit => $n )
  subtract_duration( $dur )

- fixed max/min of an infinite SpanSet
- added test for infinite duration

- from_recurrence() code cleanup

- parameter checking: The 'dates' argument to from_datetimes() 
  must be a list of DateTime objects

0.1601  2004-03-30
- more parameter checking;
  Sets should interoperate better with objects of 
  type DateTime::Event::* and DateTime::Incomplete

0.16  2004-03-29
- Makefile.PL skips processing of "Build.PL"
  Reported by Reinhold May

0.15  2004-03-28
  
  [ ENHANCEMENTS from version 0.14 ]

- Both "Makefile.PL" and "Build.PL" are provided.

- New methods:
  DateTime::SpanSet::current
  DateTime::Spanset::closest
  DateTime::Set::map / grep
  DateTime::SpanSet::map / grep
  DateTime::SpanSet::intersected_spans
  DateTime::SpanSet::start_set / end_set 

- Recurrences can be bounded sets.

- Recurrences can be as small as 1 nanosecond.

- DateTime::SpanSet::duration may return an 'infinite' 
  DateTime::Duration (instead of scalar infinity).

  [ *** BACKWARDS INCOMPATIBILITIES from version 0.14 *** ]

- The next/previous functions used in DT::Set->from_recurrence()
  MUST work with DateTime::Infinite::Future
  and DateTime::Infinite::Past parameters. 

  Failing to test for "infinity" values is known
  to cause an infinite loop in some modules.

- DateTime::Set and DateTime::SpanSet methods do not mutate the set.
  This was the behaviour in version 0.13

0.1413  2004-03-28
- detect_bounded => 1 is deprecated.

0.1412  2004-03-28
- DateTime::Set->from_recurrence - Bounded recurrences are "optional".
  use " detect_bounded => 1 " to turn them on.
  This fixes the backwards incompatibilities created by version 0.1402.

0.1411  2004-03-27
- Makefile.PL.  Suggested by Randal L. Schwartz.

0.1410  2004-03-26
- Build.PL

0.1409  2004-03-23
- evaluation of bounded recurrences is "lazier".
  (DateTime::Incomplete tests are twice as fast)

0.1408  2004-03-22
- refactored S::I::_recurrence class:
  it doesn't use "current" anymore; 
  small bugfixes & optimizations. 
  ("current" was not documented in DT::Set)
- new test: t/17quantize.t
  Tests a method to make "quantization" (or "discretization")
  of spansets.

0.1407  2004-03-16
- New methods:
  DateTime::SpanSet::current
  DateTime::Spanset::closest

- "Fixed" DateTime::SpanSet::next / previous 
  no longer "split" the returned spans.

- Added examples and parameter validation to map / grep

- DateTime::SpanSet::duration may return an 'infinite' 
  DateTime::Duration, instead of scalar infinity.

- Bugfix: DateTime::Spanset::union / intersection / ...
  correctly accept DateTime parameters.

0.1406  2004-03-15
- New methods: 
  DateTime::Set::map / grep
  DateTime::SpanSet::map / grep
  From a discussion with Andrew Pimlott and Dave Rolsky
- Cleanup "datetime" code from _recurrence.pm 
- iterate() marked as "internal"

0.1405  2004-03-15
- New method: DateTime::SpanSet::intersected_spans
  Suggested by Reinhold May
  Name suggested by Dave Rolsky

0.1404  2004-03-14
- New methods: DateTime::SpanSet::start_set / end_set 
  These are the inverse of the "from_sets" method.
  Suggested by Reinhold May

0.1403  2004-03-10
- new method DateTime::SpanSet::iterate

[ *** BACKWARDS INCOMPATIBILITIES *** ]

- DateTime::Set and DateTime::SpanSet methods do not mutate the set.
  This is the behaviour we had before version 0.13

0.1402  2004-03-08
- Recurrence functions can be used to generate bounded sets.
  See: t/16bounded_recurrence.t

- There is no limit on how small a recurrence can be.
  Recurrences as small as 1 nanosecond are possible.

[ *** BACKWARDS INCOMPATIBILITIES *** ]

  All modules that create their own recurrences
  must now be able to respond to DateTime::Infinite::Future
  and DateTime::Infinite::Past parameters. The easiest way
  to do this is to add this to the first line of the recurrence
  subroutines:

  next => sub {
     return $_[0] if $_[0]->is_infinite;
     ...
  }
  previous => sub {
     return $_[0] if $_[0]->is_infinite;
     ...
  }

0.1401  2003-11-06
- span() was returning the set, instead of the result.

0.14  2003-11-02
- duration() should not set $@ for sets with infinity duration.
  Reported by Dan Kubb.

0.13
0.1205  2003-10-16
- requires Set::Infinite 0.54 (it is the "published" version of 0.5307)
- DateTime::Set add_duration mutates the set. This is more compatible
  with the way the DateTime.pm API works.
- new DateTime::SpanSet methods:
  as_list( $span_spec ), next( $dt|$span ), previous( $dt|$span )

0.1204  2003-10-10
- DateTime::SpanSet and DateTime::Span inherit DateTime::Set $VERSION
- Trying to subtract infinity from a datetime is not fatal in duration()
  Bug report by Dan Kubb.
- new method 'iterate'
- requires Set::Infinite 0.5307 (pass new backtracking tests)
- added more tests for add_duration, subtract_duration
- added set( locale => .. ) to DateTime::Set

0.1203  2003-09-26
- Added docs to Set::Infinite::_recurrence;
  split into a separate file such that it doesn't mix the pods
- refactored union / intersection
- _is_recurrence test prevents error when programming subroutine methods

0.1202  2003-09-24
- fixed set_time_zone and add_duration: 
  was not clearing 'next' upon return, when arg was a recurrence.

0.1201  2003-09-24
- optimized contains() and intersects() when arg is a datetime
- recurrence constructor always adds '->clone' to recurrence function 
- refactored _recurrence method;
  first/last of recurrences are calculated 'on demand'
- requires Set::Infinite 0.5305

0.12   2003-09-22
- implement previous() in DT::SpanSet.pm
- Fixed: set_time_zone would mutate a clone.

0.11   2003-09-19
- Fixed callback return value on set_time_zone. 
  This caused the start date to be equal to the end date.
  Bug found by Dan Kubb.

0.10   2003-09-02
- DateTime::Span->duration now uses the new subtract_datetime_absolute
method, which means that the duration is always given in seconds.

- supports _huge_ recurrence sets (not infinite) with "virtual" elements.
  these sets have 'undef' count.
  Experimental - mostly untested !
  this adds support for sets like 'all seconds in 2003'

- faster recurrence intersection
- count returns 'undef' for infinite sets.

0.09    2003-08-18
- added DT::Set count() 
- fixed DT::SpanSet duration()
- methods that accepted a DT object, now accept a list of DT objects.
  Suggested by Ben Bennet, I think.
- added _callback_next - "previous-only recurrences"

- optimizes intersection of recurrence with span

- internal 'S::I' recurrence class

- small fix in DT::Set clone()
- DateTime::Set uses DateTime infinity constants; 
  max and min now return DateTime::Infinite::Future/Past objects.

- DateTime::Span uses DateTime infinity constants; 
  max and min now return DateTime::Infinite::Future/Past objects.
  Docs update to explain 'max()' value when a span is built using 'before'.

- added method set_time_zone()
- clone() is documented

0.08     2003-05-30
- recurrence set intersection uses 'current'
- fixed a number of methods in DateTime::Span, including intersection,
intersects, contains, union, and complement, all of which called the
non-existent DateTime::Set->new method.  Dave Rolsky.

0.07     2003-05-23
- some tweaking on intersection, union, and in the recurrence generator.
- more tests

0.06     2003-05-14
- added 'use warnings' in some tests, added DateTime 0.12 prereq.

0.04     2003-05-12
- change "closest" code to avoid duration comparison

0.03     2003-04-27
- fixes in Set.pm as_list, span.
- iterator accepts 'span' parameters.  Ben Bennett
- remove deprecated DateTime::Set->new and DateTime::SpanSet->new.  Dave Rolsky
- requires Set::Infinite 0.49

0.02     2003-04-20
- removed some calls to 'new'
- added many methods from DT::Event::Recurrence
- add 'span' parameter to as_list
- from_recurrence now accepts next + previous

0.01     2003-04-19

- first "official" release.
- implemented DateTime::SpanSet->from_sets and
  DateTime::SpanSet->from_set_and_duration
- Many doc tweaks.  Dave Rolsky
- DateTime::Span->duration and DateTime::SpanSet->duration now return
infinity instead of undef for infinite spans.  Dave Rolsky
- Added DateTime::SpanSet->empty_set.  Dave Rolsky

0.00_20  2003-04-10

- Docs for DateTime::SpanSet API 
  (not implemented)
- DateTime::Span API: 
  from_datetime_and_duration, from_datetimes


0.00_18  2003-03-25

- changes docs, changed API
  from_recurrence, from_datetimes, new()
- as_list
- previous() method (quite untested)
- small API changes
- revised docs, from Dave Rolsky
- small bugfix in creating open spans
- added DateTime::Span and DateTime::SpanSet
- put "..." to mark where we need more docs
- DateTime::Set and DateTime::Span API look ok.


0.00_13  2003-03-19

- added tests for set operations with recurrences/add
- iterator passes all tests
- the API is complete, as described in SYNOPSIS
- small fix in add() syntax; accepts a duration=> parameter
- iterator, next


0.00_10  2003-03-14

- union, intersection
- experimental code to generate recurrence from a simple callback


0.00_07  2003-02-28

- added experimental method create_recurrence()
- added experimental method add_duration()
- improved SYNOPSIS
- added 'immutability' tests
- new() will not try to clone non-DateTime parameters (such as the
  Infinity value)
- The program will die with an error message, 
  if one tries to use offset() or quantize() methods
  These methods might come back in a later version.
- new() clones its parameters.
  This means the parameters don't have to be immutable
- new() will give an error message if we try to use a scalar parameter
  instead of a DateTime
- Uses Set::Infinite as base class, instead of Date::Set::Timezone
  This means some methods just disappeared, like event() and exclude().
  RFC2445 support might come back in a later revision.
- Removed experimental Autoload code
- Added 'Changes' and 'README'
- moved POD to end of source file.

