provide and preserve aperture information
[scpubgit/DX.git] / lib / DX / ResolutionSpace.pm
1 package DX::ResolutionSpace;
2
3 use DX::Step::Backtrack;
4 use DX::Step::ResolveProposition;
5 use DX::Class;
6
7 has proposition => (is => 'ro');
8
9 has geometry_depends_on => (is => 'ro', required => 1);
10
11 has aperture => (is => 'ro', required => 1);
12
13 has members => (is => 'ro', required => 1);
14
15 sub for_deparse {
16   my ($self) = @_;
17   [ statement => [
18     [ symbol => 'rspace' ],
19     [ block => $self->members ],
20   ] ];
21 }
22
23 sub next_resolution {
24   my ($self) = @_;
25   return undef unless my ($first) = @{$self->members};
26   return $first->next_resolution;
27 }
28
29 sub remaining_resolution_space {
30   my ($self) = @_;
31   die "Sense makes not" unless my ($first, @rest) = @{$self->members};
32   return $self->but(members => [ $first->remainder, @rest ]);
33 }
34
35 sub next_step {
36   my ($self) = @_;
37   return DX::Step::Backtrack->new unless @{$self->members};
38   return DX::Step::ResolveProposition->new(resolution_space => $self);
39 }
40
41 1;