1 package DX::ResolvedPropositionSet;
6 has dependency_map => (is => 'ro', required => 1);
8 has propositions => (is => 'ro', required => 1);
10 has scope_depth => (is => 'ro', required => 1);
16 dependency_map => DX::DependencyMap->new_empty,
21 sub 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);
27 dependency_map => $new_depmap,
28 propositions => [ @already, $prop ],
29 scope_depth => $self->scope_depth,
33 sub 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);
41 dependency_map => $new_depmap,
42 propositions => \@props,
43 scope_depth => $self->scope_depth,
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;