chiark / gitweb /
wip
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 14 Jan 2019 01:39:12 +0000 (01:39 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 14 Jan 2019 01:39:12 +0000 (01:39 +0000)
parse-input-graph

index 8d0c8c608b8b3b6cafb1e52a581cb0c78f2b7393..c44c56c39e5cdc1624edccf6393bf9e41a857472 100755 (executable)
@@ -14,6 +14,10 @@ our %region;
 # $region{NAME}{Adj}[]{Dikes}
 # $region{NAME}{Adj}[]{L}
 
+our %edges;
+# $edges{EARLIER}{LATER}{Dikes}
+# $edges{EARLIER}{LATER}{L}[]
+
 sub read_in () {
   my $ccolour;
   my $cregion;
@@ -35,8 +39,8 @@ sub read_in () {
       $cregion = $name;
       next;
     }
-    if (my ($aref, $adykes) = m{^\t\t(\S.*[A-Za-z.])(?: (\+\+?))?$}) {
-      my $adj = { Dykes => length $adykes, L => $. };
+    if (my ($aref, $adikes) = m{^\t\t(\S.*[A-Za-z.])(?: (\+\+?))?$}) {
+      my $adj = { Dikes => length $adikes, L => $. };
       if ($aref =~ m{\.}) {
        $adj->{Pattern} = $aref;
        $aref =~ s{\-}{[^- ]*-}g;
@@ -102,8 +106,25 @@ sub resolve_arefs () {
   }
 }
 
+sub edges () {
+  foreach my $ra (sort keys %region) {
+    foreach my $adja (@{ $region{$ra}{Adj} }) {
+      my $rb = $adja->{Name};
+      my ($r0,$r1) =
+         $ra lt $rb ? ($ra,$rb) :
+         $rb lt $ra ? ($rb,$ra) : confess "$ra $rb ?";
+      push @{ $edges{$r0}{$r1}{L} }, $adja->{L};
+      my $e = $edges{$r0}{$r1};
+      $e->{Dikes} //= $adja->{Dikes};
+      confess "$r0 $r1 $e->{L} $e->{Dikes} $adja->{Dikes} ?"
+         unless $e->{Dikes} == $adja->{Dikes};
+    }
+  }
+}
+
 read_in();
 resolve_arefs();
+edges();
 
 # Local variables:
 # cperl-indent-level: 2