switchover to rspace next_step and dump step()
[scpubgit/DX.git] / lib / DX / Predicate / Eq.pm
index f6d6082..e21be8c 100644 (file)
@@ -1,11 +1,44 @@
 package DX::Predicate::Eq;
 
+use DX::Utils qw(rspace res CONTENTS_OF);
 use DX::Class;
 
 with 'DX::Role::Predicate';
 
-sub _possible_resolution_list {
-  shift->_make_equal(@_)
+sub _resolution_space_for {
+  my ($self, $left, $right) = @_;
+
+  my $deps = [ [ CONTENTS_OF ,=> $left ], [ CONTENTS_OF ,=> $right ] ];
+
+  if ($left->equals($right)) {
+    return rspace(
+      geometry_depends_on => $deps,
+      members => [
+        res(
+          actions => [],
+          veracity_depends_on => $deps,
+        )
+      ]
+    );
+  }
+
+  my @members = map {
+    my ($set_this, $to_this) = @$_;
+    res(
+      actions => [ $set_this->action_for_set_value($to_this) ],
+      veracity_depends_on => $deps,
+    );
+  } grep {
+    $_->[0]->can_set_value
+  } (
+    [ $left, $right ],
+    [ $right, $left ],
+  );
+
+  return rspace(
+    geometry_depends_on => $deps,
+    members => \@members,
+  );
 }
 
 1;