follow alternative rspace entries without backtracking, explicitly resolve
[scpubgit/DX.git] / lib / DX / Step / CompleteResolution.pm
1 package DX::Step::CompleteResolution;
2
3 use DX::Class;
4
5 with 'DX::Role::Step';
6
7 has original_search_state => (
8   is => 'ro', isa => SearchState, required => 1
9 );
10
11 has resolution_space => (
12   is => 'ro', isa => ResolutionSpace, required => 1
13 );
14
15 sub apply_to {
16   my ($self, $old_ss) = @_;
17   my $orig_ss = $self->original_search_state;
18   my $ns = do {
19     if (my $prop = $orig_ss->next_proposition) {
20       $prop->consider_step
21     } else {
22       $old_ss->on_solution_step
23     }
24   };
25   return $old_ss->but(
26     next_step => $ns,
27     decisions_taken => [
28       [ $self->resolution_space, $orig_ss ],
29       @{$old_ss->decisions_taken}
30     ],
31   );
32 }
33
34 1;