pass rspace to backtrack (as yet unused), tweak DependencyMap API
[scpubgit/DX.git] / lib / DX / DependencyMap.pm
index 22b09a0..bd4707d 100644 (file)
@@ -9,22 +9,22 @@ use DX::Class;
 
 has deps => (is => 'ro', isa => DependencyTree, required => 1);
 
-has revdeps => (is => 'ro', required => 1);
+has revdeps => (is => 'ro', required => 1, isa => HashRef[DependencyList]);
 
 sub new_empty {
   my ($class) = @_;
   $class->new(deps => {}, revdeps => {});
 }
 
-sub with_entry_for {
+sub with_dependencies_for {
   my ($self, $for_id, $deps_for) = @_;
-  my @expanded = $self->_expand_deps($deps_for);
+  my $old_revdeps = $self->revdeps;
   my $new_revdeps = {
-    %{$self->revdeps},
-    $for_id => \@expanded,
+    %{$old_revdeps},
+    $for_id => [ @{$old_revdeps->{$for_id}||[]}, @$deps_for ],
   };
   my $new_deps = $self->_merge_deps_for(
-    $self->deps, $for_id, map @{$_}[1..$#$_], @expanded
+    $self->deps, $for_id, @$deps_for
   );
   ref($self)->new(
     deps => $new_deps,
@@ -37,7 +37,7 @@ sub without_entries_for {
   my %new_revdeps = %{$self->revdeps};
   my $new_deps = $self->deps;
   $new_deps = $self->_unmerge_deps_for(
-    $new_deps, $_, map @{$_}[1..$#$_], @{$new_revdeps{$_}}
+    $new_deps, $_, @{$new_revdeps{$_}}
   ) for @for_ids;
   delete @new_revdeps{@for_ids};
   ref($self)->new(
@@ -78,25 +78,7 @@ sub _mangle_deps {
   return $root->[0];
 }
 
-sub _expand_deps {
-  my ($self, $dep_groups) = @_;
-  my @exp;
-  assert_DependencyGroupList $dep_groups;
-  map {
-    my ($on, @deps) = @$_;
-    my @exp;
-    DEP: foreach my $dep (@deps) {
-      my ($type, @path) = @$dep;
-      push @exp, [
-        $type,
-        map { ref() ? @{$_->identity_path or next DEP} : $_ } @path
-      ];
-    }
-    (@exp ? [ $on, @exp ] : ());
-  } @$dep_groups;
-}
-
-sub _dependents_of {
+sub dependents_of {
   my ($self, $event) = @_;
   my ($type, @path) = @$event;
   my $root = [ $self->deps ];
@@ -133,7 +115,7 @@ sub _dependents_of {
 sub but_expire_dependents_of {
   my ($self, @events) = @_;
   my @expired = keys %{{
-    map +($_ => 1), map $self->_dependents_of($_), @events
+    map +($_ => 1), map $self->dependents_of($_), @events
   }};
   # Didn't expire anything? Don't clone self
   return $self unless @expired;