Esempio n. 1
0
 /// <summary>
 /// Inverts a property map-based relation.
 /// </summary>
 /// <param name="a">graph adapter providing temporary list storage</param>
 /// <param name="srcrel">source property map</param>
 /// <param name="dstrel">destination property map for inverted relation</param>
 /// <param name="nodes">nodes to be considered for the inversion</param>
 public static void InvertRelation <T>(this IGraphAdapter <T> a,
                                       IPropMap <T, T[]> srcrel, IPropMap <T, T[]> dstrel, IEnumerable <T> nodes)
 {
     a.CreateDefaultTempStorage(nodes);
     srcrel.RequireAccess(EAccess.ReadOnly);
     dstrel.RequireAccess(EAccess.WriteOnly);
     foreach (T node in nodes)
     {
         foreach (T adj in srcrel[node])
         {
             a.TempList[adj].Add(node);
         }
     }
     foreach (T node in nodes)
     {
         dstrel[node] = a.TempList[node].ToArray();
     }
     a.TempList.Clear(nodes);
 }