follow alternative rspace entries without backtracking, explicitly resolve
[scpubgit/DX.git] / lib / DX / Step / CompleteResolution.pm
CommitLineData
d6b0c811 1package DX::Step::CompleteResolution;
2
3use DX::Class;
4
5with 'DX::Role::Step';
6
7has original_search_state => (
8 is => 'ro', isa => SearchState, required => 1
9);
10
11has resolution_space => (
12 is => 'ro', isa => ResolutionSpace, required => 1
13);
14
15sub 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
341;