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 | |
8 | sub _possible_resolution_list { |
7f385fb2 |
9 | my ($self, @args) = @_; |
10 | my $rspace = $self->_resolution_space_for(@args); |
11 | return () unless my @members = @{$rspace->members}; |
12 | return map step( |
13 | actions => $_->actions, |
14 | depends_on => $_->veracity_depends_on |
15 | ), @members; |
16 | } |
17 | |
18 | sub _resolution_space_for { |
255e1884 |
19 | my ($self, $left, $right) = @_; |
7f385fb2 |
20 | |
21 | my $deps = [ [ CONTENTS_OF ,=> $left ], [ CONTENTS_OF ,=> $right ] ]; |
22 | |
255e1884 |
23 | if ($left->equals($right)) { |
7f385fb2 |
24 | return rspace( |
25 | geometry_depends_on => $deps, |
26 | members => [ |
27 | res( |
28 | actions => [], |
29 | veracity_depends_on => $deps, |
30 | ) |
31 | ] |
255e1884 |
32 | ); |
33 | } |
7f385fb2 |
34 | |
35 | my @members = map { |
36 | my ($set_this, $to_this) = @$_; |
37 | res( |
38 | actions => [ $set_this->action_for_set_value($to_this) ], |
39 | veracity_depends_on => $deps, |
40 | ); |
41 | } grep { |
42 | $_->[0]->can_set_value |
43 | } ( |
44 | [ $left, $right ], |
45 | [ $right, $left ], |
46 | ); |
47 | |
48 | return rspace( |
49 | geometry_depends_on => $deps, |
50 | members => \@members, |
255e1884 |
51 | ); |
9d759b64 |
52 | } |
53 | |
54 | 1; |