Reinhold May wrote:
> 
> Flavio, I haven't tried that yet,  but  from  my
> understanding, these code excerpts don't  solve
> my  problem.   I  guess,  your question was 
> directed into this possiblity:
> 
> My problem refers to SpanSets derived from sets
> of  recurrences, which I can't imagine to be 
> internally represented as lists  (in
> fact, I know thy're not, but I can't quite figure
> out  yet  how they are represented) but must be 
> represented as  some  kind  of generic structure.
> 

A "infinite recurrence" is stored as a reference
to a subroutine (there are actually 3 closures
in each recurrence). This is managed by the
Set::Infinite::_recurrence module.

You can see the internal data structure by running
this:
---
use DateTime::Event::Recurrence;
use DateTime::SpanSet;
use Data::Dumper;
use strict;

my $dt_set1 = DateTime::Event::Recurrence->daily;
my $dt_set2 = $dt_set1->clone->add( hours => 12 );

my $spanset = DateTime::SpanSet->from_sets
           ( start_set => $dt_set1, 
             end_set => $dt_set2 );

print "DateTime::Set\n\n";
print Dumper ( $dt_set1 );

print "\n\nDateTime::SpanSet\n\n";
print Dumper( $spanset );
---

The "recurrence" is the part that says:
  
  'param' => [
             sub { ...
             sub { ...
             sub { ...
           ],

See also: 
http://search.cpan.org/~fglock/Set-Infinite-
0.55/lib/Set/Infinite.pm#INTERNALS

>    So my question really is: is a recurrence set
> that is used to create a SpanSet preserved  in 
> that  SpanSet?   If  so,  can  I extract it?
> 

I don't think it is advisable to do that.
Note that the data structure becomes much more
complex as you start doing operations like
union/intersection/complement/...

>    To get the list contents, I could imagine this
> code  to  work quite well with the existing API 
> functions:
> 
>    my @list;
>    foreach my $span ($spanset->as_list()) {
>       push(@list, $span->start());
>    }
>    my $start_set = DateTime::Set->from_datetimes(
>       datetimes => [EMAIL PROTECTED]
>    );
> 

It doesn't work with unbounded recurrences, because
as_list() will refuse to generate an infinite array.

But this is fine with bounded sets.

- Flavio S. Glock


Reply via email to