package DX::Predicate::Eq;
-use DX::Utils qw(step CONTENTS_OF);
+use DX::Utils qw(step rspace res CONTENTS_OF);
use DX::Class;
with 'DX::Role::Predicate';
sub _possible_resolution_list {
+ my ($self, @args) = @_;
+ my $rspace = $self->_resolution_space_for(@args);
+ return () unless my @members = @{$rspace->members};
+ return map step(
+ actions => $_->actions,
+ depends_on => $_->veracity_depends_on
+ ), @members;
+}
+
+sub _resolution_space_for {
my ($self, $left, $right) = @_;
+
+ my $deps = [ [ CONTENTS_OF ,=> $left ], [ CONTENTS_OF ,=> $right ] ];
+
if ($left->equals($right)) {
- return step(
- actions => [],
- depends_on => [
- [ CONTENTS_OF ,=> $left ], [ CONTENTS_OF ,=> $right ]
- ],
+ return rspace(
+ geometry_depends_on => $deps,
+ members => [
+ res(
+ actions => [],
+ veracity_depends_on => $deps,
+ )
+ ]
);
}
- return (
- do {
- if ($left->is_set and my $set = $right->action_for_set_value($left)) {
- step(
- actions => [ $set ],
- depends_on => [
- [ CONTENTS_OF ,=> $left ], [ CONTENTS_OF ,=> $right ]
- ]
- )
- } else {
- ()
- }
- },
- do {
- if ($right->is_set and my $set = $left->action_for_set_value($right)) {
- step(
- actions => [ $set ],
- depends_on => [
- [ CONTENTS_OF ,=> $left ], [ CONTENTS_OF ,=> $right ]
- ]
- )
- } else {
- ()
- }
- },
+
+ 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,
);
}