node package manager
Loosely couple your services. Use Orgs to version and reuse your code. Create a free org »



Given a layering of a graph and its edges, return a new graph with dummy vertices inserted such that no edge may span more than one layer.


addPhonies(layer:Layering, to:Edges, from:Edges[, i:Interface]) → Result
{ layering: Layering,
  vertices: Set<Vertex>,
  outgoing: Edges,
  incoming: Edges }
Map<Vertex → Set<Edge>> :: Edges

A map from Vertex to a Set of Edges is known as Edges.

[Set<Vertex>, ...] :: Layering

An array representing a valid layering of a graph. From the above example, the layering would look something like this:

[ Set<V>,  // ← layer zero
  Set<Z, B>,
  Set<Y, A>,
  Set<X> ] // ← layer six
(Vertex → PhonyVertex) :: MakeP

A function that takes an originating vertex (for metadata purposes) and creates a phony vertex.

((Edge, Vertex | PhonyVertex, Vertex | PhonyVertex) → Edge) :: MakeE

A function that takes an originating edge, a source vertex and a destination vertex, and returns a new Edge instance.

{[getFrom:E2V][, getTo:E2V][, makeEdge:MakeE][, makePhony:MakeP]} :: Interface

An object containing methods necessary for implementing the layer assignment algorithm. getFrom should return the source vertex of an edge, getTo should return the destination vertex. makeEdge should create a new edge instance with the provided source and destination vertices. makePhony should return a phony vertex.

The default values act as follows:

const getFrom = edge => edge[0]
const getTo = edge => edge[1]
const makePhony = ()=> { return {phony: true}}
const makeEdge = (edge, from, to) => {
  const newEdge = Object.create(edge)
  [newEdge...] = [from, to]
  return newEdge