Commit | Line | Data |
2e93f662 |
1 | package DX::Predicate::Eq; |
9d759b64 |
2 | |
7f385fb2 |
3 | use DX::Utils qw(step rspace res CONTENTS_OF); |
9d759b64 |
4 | use DX::Class; |
5 | |
6 | with 'DX::Role::Predicate'; |
7 | |
7f385fb2 |
8 | sub _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 | |
44 | 1; |