add exhaustionstep and resumesearch concepts
[scpubgit/DX.git] / lib / DX / SearchProcess.pm
index 4e44db1..3072313 100644 (file)
@@ -6,7 +6,7 @@ use DX::Class;
 has current_search_state => (
   is => 'ro', isa => SearchState, required => 1,
   handles => [ qw(
-    current_hypothesis next_step propositions adjustments_made
+    current_hypothesis next_step propositions
   ) ],
 );
 
@@ -37,14 +37,16 @@ sub find_solution {
 sub force_backtrack {
   my ($self) = @_;
   my $new_ss = $self->current_search_state->force_backtrack;
-  return undef unless $new_ss;
+  # XXX infinite loop without the next line and I'm unsure why we don't
+  # get a loop-ending undef from elsewhere if the backtrack failed
+  return undef unless $new_ss->next_step;
   return $self->but(current_search_state => $new_ss);
 }
 
 sub find_next_solution {
   my ($self) = @_;
-  return undef unless my $bt = $self->force_backtrack;
-  return $bt->find_solution;
+  my $state = $self->current_search_state->with_one_step;
+  return $self->but(current_search_state => $state)->find_solution;
 }
 
 1;