implement ->equals for values
[scpubgit/DX.git] / lib / DX / ResolvedPropositionSet.pm
CommitLineData
efad53c4 1package DX::ResolvedPropositionSet;
2
3use DX::DependencyMap;
4use Moo;
5
6has dependency_map => (is => 'ro', required => 1);
7
8has propositions => (is => 'ro', required => 1);
9
10has scope_depth => (is => 'ro', required => 1);
11
12sub new_empty {
13 my ($class) = @_;
14 $class->new(
15 propositions => [],
16 dependency_map => DX::DependencyMap->new_empty,
17 scope_depth => 0,
18 );
19}
20
21sub with_resolution_for {
22 my ($self, $prop, $deps) = @_;
23 my $id = my @already = @{$self->propositions};
24 my $new_depmap = $self->dependency_map
25 ->with_entry_for($id, $deps);
26 ref($self)->new(
27 dependency_map => $new_depmap,
28 propositions => [ @already, $prop ],
29 scope_depth => $self->scope_depth,
30 );
31}
32
33sub with_updated_dependencies_for {
34 my ($self, $prop, $deps) = @_;
35 my @props = @{$self->propositions};
36 my ($id) = grep $props[$_] eq $prop, 0..$#props;
37 die "WHUT" unless $id;
38 my $new_depmap = $self->dependency_map
39 ->with_entry_for($id, $deps);
40 ref($self)->new(
41 dependency_map => $new_depmap,
42 propositions => \@props,
43 scope_depth => $self->scope_depth,
44 );
45}
46
47sub but_expire_for {
48 my ($self, @events) = @_;
49 my ($depmap, @expired_ids) = $self->dependency_map
50 ->but_expire_dependents_of(@events);
51 # Didn't expire anything? Don't clone self
52 return $self if $depmap eq $self->dependency_map;
53 die 'WHUT';
54}
55
56
571;