/// <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); }