Commit | Line | Data |
7f385fb2 |
1 | package DX::ResolutionSpace; |
2 | |
d69f4df4 |
3 | use DX::Step::Backtrack; |
29daa554 |
4 | use DX::Step::ResolveProposition; |
7f385fb2 |
5 | use DX::Class; |
6 | |
0c1b8f3b |
7 | has proposition => (is => 'ro'); |
8 | |
7f385fb2 |
9 | has geometry_depends_on => (is => 'ro', required => 1); |
10 | |
11 | has members => (is => 'ro', required => 1); |
12 | |
113f21b9 |
13 | sub next_resolution { |
14 | my ($self) = @_; |
15 | return undef unless my ($first) = @{$self->members}; |
16 | return $first->next_resolution; |
17 | } |
18 | |
19 | sub remaining_resolution_space { |
20 | my ($self) = @_; |
21 | die "Sense makes not" unless my ($first, @rest) = @{$self->members}; |
22 | return $self->but(members => [ $first->remainder, @rest ]); |
23 | } |
24 | |
0c1b8f3b |
25 | sub next_step { |
26 | my ($self) = @_; |
d69f4df4 |
27 | return DX::Step::Backtrack->new unless @{$self->members}; |
29daa554 |
28 | return DX::Step::ResolveProposition->new(resolution_space => $self); |
0c1b8f3b |
29 | } |
30 | |
7f385fb2 |
31 | 1; |