Commit | Line | Data |
2e93f662 |
1 | package DX::Predicate::Eq; |
9d759b64 |
2 | |
fe5af11f |
3 | use DX::Utils qw(rspace res CONTENTS_OF expand_deps); |
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 | |
fe5af11f |
11 | my $deps = expand_deps([ |
12 | [ CONTENTS_OF ,=> $left ], [ CONTENTS_OF ,=> $right ] |
13 | ]); |
7f385fb2 |
14 | |
6aa36401 |
15 | my $aperture = [ map @{$_->aperture_for_set_value}, $left, $right ]; |
16 | |
255e1884 |
17 | if ($left->equals($right)) { |
7f385fb2 |
18 | return rspace( |
19 | geometry_depends_on => $deps, |
6aa36401 |
20 | aperture => $aperture, |
7f385fb2 |
21 | members => [ |
22 | res( |
23 | actions => [], |
24 | veracity_depends_on => $deps, |
25 | ) |
26 | ] |
255e1884 |
27 | ); |
28 | } |
7f385fb2 |
29 | |
30 | my @members = map { |
31 | my ($set_this, $to_this) = @$_; |
32 | res( |
33 | actions => [ $set_this->action_for_set_value($to_this) ], |
34 | veracity_depends_on => $deps, |
35 | ); |
36 | } grep { |
37 | $_->[0]->can_set_value |
38 | } ( |
39 | [ $left, $right ], |
40 | [ $right, $left ], |
41 | ); |
42 | |
43 | return rspace( |
44 | geometry_depends_on => $deps, |
6aa36401 |
45 | aperture => $aperture, |
7f385fb2 |
46 | members => \@members, |
255e1884 |
47 | ); |
9d759b64 |
48 | } |
49 | |
50 | 1; |