Class IDirectedAcyclicGraphExtensions
Wrapper for all extension methods essentially using the IDirectedAcyclicGraph
interface.
Inheritance
IDirectedAcyclicGraphExtensions
Assembly: MetricSetSyntaxTree.dll
Syntax
public static class IDirectedAcyclicGraphExtensions
Methods
View Source
AddClosure<T>(T, Stack<T>, Func<T, Boolean>, Action<T>)
Add the "closure" of node
to a mystery collection, using
provided methods to determine whether a node is contained in the collection,
and to add a method to the collection.
Declaration
public static void AddClosure<T>(this T node, Stack<T> stack, Func<T, bool> contains, Action<T> add)
where T : IDirectedAcyclicGraph<T>
Parameters
Type |
Name |
Description |
T |
node |
|
Stack<T> |
stack |
The contents of this are ignored. It is required as a parameter to allow re-use
of this collection for maximal performance.
|
Func<T, Boolean> |
contains |
|
Action<T> |
add |
|
Type Parameters
View Source
AddParents<T>(IDictionary<T, ISet<T>>, T)
Add the mappings parent -> key
to dict
.
If any parents do not exist as keys, their values are updated as well.
Declaration
public static void AddParents<T>(this IDictionary<T, ISet<T>> dict, T key)
where T : IDirectedAcyclicGraph<T>
Parameters
Type Parameters
View Source
Ancestors(Expression, Boolean)
All direct and indirect parents of expr
.
If idempotent
is set to true, the result will
include expr
itself.
Declaration
public static ISet<Expression> Ancestors(this Expression expr, bool idempotent = false)
Parameters
Returns
View Source
Ancestors(Table, Boolean)
All direct and indirect parents of table
.
If idempotent
is set to true, the result will
include table
itself.
Declaration
public static ISet<Table> Ancestors(this Table table, bool idempotent = false)
Parameters
Returns
View Source
Closure(Expression)
All nodes which are either expression
, or a direct / indirect
parent (ancestor) of expression
.
Declaration
public static ISet<Expression> Closure(this Expression expression)
Parameters
Returns
View Source
Closure(IEnumerable<Expression>)
All nodes in expressions
, along with their direct and
indirect parents (ancestors).
Declaration
public static ISet<Expression> Closure(this IEnumerable<Expression> expressions)
Parameters
Returns
View Source
Closure<T>(T)
All nodes which are either t
, or a direct / indirect
parent (ancestor) of t
.
Declaration
public static ISet<T> Closure<T>(this T t)
where T : IDirectedAcyclicGraph<T>
Parameters
Type |
Name |
Description |
T |
t |
|
Returns
Type Parameters
View Source
Closure<T>(IEnumerable<T>)
All nodes in ts
, along with their direct and indirect
parents (ancestors).
Declaration
public static ISet<T> Closure<T>(this IEnumerable<T> ts)
where T : IDirectedAcyclicGraph<T>
Parameters
Returns
Type Parameters
View Source
DescendantLookup<T>(IEnumerable<T>)
Produce a mapping from all nodes in ts
to the collection
of nodes which have a given node as direct / indirect child (descendant).
Declaration
public static IDictionary<T, ISet<T>> DescendantLookup<T>(this IEnumerable<T> ts)
where T : IDirectedAcyclicGraph<T>
Parameters
Returns
Type Parameters
View Source
DescendantsIn<T>(T, IEnumerable<T>)
All elements of candidates
which are either equal to
parent
, or are a direct / indirect child of
parent
.
Declaration
public static ISet<T> DescendantsIn<T>(this T parent, IEnumerable<T> candidates)
where T : IDirectedAcyclicGraph<T>
Parameters
Type |
Name |
Description |
T |
parent |
|
IEnumerable<T> |
candidates |
|
Returns
Type Parameters
View Source
DescendantsIn<T>(IEnumerable<T>, IEnumerable<T>)
All elements of candidates
which are in parents
,
or are direct / indirect children of an element of parents
.
Declaration
public static ISet<T> DescendantsIn<T>(this IEnumerable<T> parents, IEnumerable<T> candidates)
where T : IDirectedAcyclicGraph<T>
Parameters
Returns
Type Parameters
View Source
LargestParentCountWith<T>(IEnumerable<T>, Func<T, Boolean>)
Given a collection of nodes, map each of them to the maximum
count of parent nodes that satisfy the condition. The maximum is taken
over the counts for all the chains of parents of each node.
Declaration
public static IDictionary<T, int> LargestParentCountWith<T>(this IEnumerable<T> ts, Func<T, bool> condition)
where T : IDirectedAcyclicGraph<T>
Parameters
Returns
Type Parameters
View Source
Leaves<T>(IEnumerable<T>)
All elements in ts
which are not the parent
of another element in ts
.
Declaration
public static IEnumerable<T> Leaves<T>(this IEnumerable<T> ts)
where T : IDirectedAcyclicGraph<T>
Parameters
Returns
Type Parameters
View Source
Ordered(Table)
All direct / indirect parents (ancestors) of t
,
ordered by dependency.
Declaration
public static IEnumerable<Table> Ordered(this Table t)
Parameters
Type |
Name |
Description |
Table |
t |
|
Returns
View Source
OrderedDescendants<T>(T, Func<T, IEnumerable<T>>)
Return the collection of descendants of node
in linear order,
using the provided function to lookup children. This is more performant than chaining
together the "descendants in" and "ordered unique" methods naively whenever a speedier
child-lookup method exists.
Declaration
public static IEnumerable<T> OrderedDescendants<T>(this T node, Func<T, IEnumerable<T>> children)
where T : IDirectedAcyclicGraph<T>
Parameters
Returns
Type Parameters
View Source
OrderedUnique<T>(IEnumerable<T>, Boolean)
All distinct nodes in ts
, ordered from child to parent
as a linear extension
of the original partial order.
Declaration
public static IReadOnlyCollection<T> OrderedUnique<T>(this IEnumerable<T> ts, bool includeClosure = true)
where T : IDirectedAcyclicGraph<T>
Parameters
Type |
Name |
Description |
IEnumerable<T> |
ts |
|
Boolean |
includeClosure |
Whether or not to include the closure of ts in the result.
|
Returns
Type Parameters
View Source
PathTo<T>(T, T)
Use depth-first search (DFS) to find a path start
-> ... ->
end
, throwing an InvalidOperationException if
none exists. This method does not guarantee to return the shortest path.
Declaration
public static IReadOnlyList<T> PathTo<T>(this T start, T end)
where T : IDirectedAcyclicGraph<T>
Parameters
Type |
Name |
Description |
T |
start |
|
T |
end |
|
Returns
Type Parameters
View Source
TopParentsWith<T>(T, Func<T, Boolean>)
Set of closest parents of node
that satisfy the
condition condition
.
Declaration
public static ISet<T> TopParentsWith<T>(this T node, Func<T, bool> condition)
where T : IDirectedAcyclicGraph<T>
Parameters
Type |
Name |
Description |
T |
node |
|
Func<T, Boolean> |
condition |
|
Returns
Type Parameters
View Source
ToPrettyString<T>(T, Int32, Int32)
Print a "pretty" string that encodes a cascade of nodes. This is useful in printing
meaningful warning / error messages.
Declaration
public static string ToPrettyString<T>(this T t, int maxDepth = 2147483647, int startingDepth = 0)
where T : IDirectedAcyclicGraph<T>
Parameters
Type |
Name |
Description |
T |
t |
|
Int32 |
maxDepth |
Print at most this depth of parents.
|
Int32 |
startingDepth |
Start by indenting everything by this many spaces.
|
Returns
Type Parameters