lift some of the rspace handling into the Resolution* classes
[scpubgit/DX.git] / lib / DX / Predicate / Eq.pm
CommitLineData
2e93f662 1package DX::Predicate::Eq;
9d759b64 2
7f385fb2 3use DX::Utils qw(step rspace res CONTENTS_OF);
9d759b64 4use DX::Class;
5
6with 'DX::Role::Predicate';
7
7f385fb2 8sub _resolution_space_for {
255e1884 9 my ($self, $left, $right) = @_;
7f385fb2 10
11 my $deps = [ [ CONTENTS_OF ,=> $left ], [ CONTENTS_OF ,=> $right ] ];
12
255e1884 13 if ($left->equals($right)) {
7f385fb2 14 return rspace(
15 geometry_depends_on => $deps,
16 members => [
17 res(
18 actions => [],
19 veracity_depends_on => $deps,
20 )
21 ]
255e1884 22 );
23 }
7f385fb2 24
25 my @members = map {
26 my ($set_this, $to_this) = @$_;
27 res(
28 actions => [ $set_this->action_for_set_value($to_this) ],
29 veracity_depends_on => $deps,
30 );
31 } grep {
32 $_->[0]->can_set_value
33 } (
34 [ $left, $right ],
35 [ $right, $left ],
36 );
37
38 return rspace(
39 geometry_depends_on => $deps,
40 members => \@members,
255e1884 41 );
9d759b64 42}
43
441;