Skip to main content

interface EdgeValuedGraphSorted<N,V>

An type-invariant immutable valued edge (undirected) graph. The nodes are internally maintained using SortedMaps See the Graph documentation and the EdgeValuedGraphSorted API documentation

Companion namespace: EdgeValuedGraphSorted

Extends: EdgeValuedGraphBase<N,V,Tp>

Implemented by: EdgeValuedGraphSorted.NonEmpty<N,V>

Type parameters

NameDescription
Nthe node type
Vthe connection value type
example
const g1 = EdgeValuedGraphSorted.empty<number, string>()
const g2 = EdgeValuedGraphSorted.of([1], [2, 3, 'a'], [2, 4, 'b'])

Properties

connectionSize

Returns the amount of connections in the graph.

Definition

readonly connectionSize: number;

example
ArrowGraphHashed.empty<number>().connectionSize  // => 0
ArrowGraphHashed.of([1], [2, 3]).connectionSize // => 1

Overrides

VariantGraphBase.connectionSize

context

Returns the context associated to this collection instance.

Definition

readonly context: WithGraphValues<Tp, N, V>['context'];

Overrides

ValuedGraphBase.context

isDirected

Returns false since this is an edge (undirected) graph instance.

Definition

readonly isDirected: false;

Overrides

EdgeValuedGraphBase.isDirected

isEmpty

Returns true if the graph has no nodes.

Definition

readonly isEmpty: boolean;

example
ArrowGraphHashed.empty<number>().isEmpty  // => true
ArrowGraphHashed.of([1]).isEmpty // => false

Overrides

VariantGraphBase.isEmpty

linkMap

Returns the nested Map representation of the graph connections.

Definition

readonly linkMap: WithGraphValues<Tp, N, V>['linkMap'];

example
ArrowValuedGraphHashed.of([1, 2, 'a'], [2, 3, 'b']).linkMap.toArray()
// => [[1, HashMap(2 -> 'a')], [2, HashMap(3 -> 'b')]]

Overrides

VariantValuedGraphBase.linkMap

nodeSize

Returns the amount of nodes in the graph.

Definition

readonly nodeSize: number;

example
ArrowGraphHashed.empty<number>().nodeSize  // => 0
ArrowGraphHashed.of([1], [2, 3]).nodeSize // => 3

Overrides

VariantGraphBase.nodeSize

Methods

[Symbol.iterator]

Returns a FastIterator instance used to iterate over the values of this Iterable.

Definition

[Symbol.iterator](): FastIterator<T>;

Overrides

FastIterable.[Symbol.iterator]

addNode

Returns the graph with the given node added, if it was not yet present.

Definition

addNode(node: N): WithGraphValues<Tp, N, V>['nonEmpty'];

Parameters

NameTypeDescription
nodeNthe node to add
example
const g = ArrowGraphHashed.of([1], [2, 3])
g.addNode(4).stream().toArray() // => [[1], [2, 3], [4]]
g.addNode(1).stream().toArray() // ==> [[1], [2, 3]]

Overrides

GraphConnect.addNode

addNodes

Returns the graph with the nodes from the given nodes StreamSource added.

Definitions

addNodes(nodes: StreamSource.NonEmpty<N>): WithGraphValues<Tp, N, V>['nonEmpty'];

addNodes(nodes: StreamSource<N>): WithGraphValues<Tp, N, V>['normal'];

Parameters

NameTypeDescription
nodesStreamSource.NonEmpty<N>a StreamSource containing the nodes to add
example
const g = ArrowGraphHashed.of([1], [2, 3])
g.addNodes([4, 1]).stream().toArray() // => [[1], [2, 3], [4]]
g.addNodes([1, 2]).stream().toArray() // => [[1], [2, 3]]

Overrides

GraphConnect.addNodes

assumeNonEmpty

Returns the collection as a .NonEmpty type

Definition

assumeNonEmpty(): WithGraphValues<Tp, N, V>['nonEmpty'];

throws

RimbuError.EmptyCollectionAssumedNonEmptyError if the collection is empty

example
ArrowGraphHashed.empty<number>().assumeNonEmpty()   // => throws
const g: ArrowGraphHashed<number> = ArrowGraphHashed.of([1, 1], [2, 2])
const g2: ArrowGraphHashed.NonEmpty<number> = g // => compiler error
const g3: ArrowGraphHashed.NonEmpty<number> = g.assumeNonEmpty()
note

returns reference to this collection

Overrides

VariantGraphBase.assumeNonEmpty

connect

Returns the graph where given nodes node1 and node2 are connected with the given value.

Definition

connect(node1: N, node2: N, value: V): WithGraphValues<Tp, N, V>['nonEmpty'];

Parameters

NameTypeDescription
node1Nthe first node
node2Nthe second node
valueVthe connection value
example
const g = ArrowValuedGraphHashed.of([1, 2, 'a'], [2, 3, 'b'])
g.connect(3, 1, 'c').stream().toArray()
// => [[1, 2, 'a'], [2, 3, 'b'], [3, 1, 'c']]

Overrides

ValuedGraphBase.connect

connectAll

Returns the graph with the connections from the given connections StreamSource added.

Definitions

connectAll(connections: StreamSource.NonEmpty<WithGraphValues<Tp, N, V>['link']>): WithGraphValues<Tp, N, V>['nonEmpty'];

connectAll(connections: StreamSource<WithGraphValues<Tp, N, V>['link']>): WithGraphValues<Tp, N, V>['normal'];

Parameters

NameTypeDescription
connectionsStreamSource.NonEmpty<WithGraphValues<Tp, N, V>['link']>a StreamSource conntaining tuple representing the connections to add
example
const g = ArrowGraphHashed.of([1], [2, 3])
g.connectAll([[1, 2], [3, 1]]).stream().toArray() // => [[1, 2], [2, 3], [3, 1]]
const g2 = ArrowValuedGraphHashed.of([1], [2, 3, 'a'])
g2.connectAll([[1, 2, 'b'], [2, 3, 'c']]).stream().toArray()
// => [[1, 2, 'b'], [2, 3, 'c']]

Overrides

GraphConnect.connectAll

disconnect

Returns the graph with the connection between given node1 and node2 removed if it exists.

Definition

disconnect<UN = N>(node1: RelatedTo<N, UN>, node2: RelatedTo<N, UN>): WithGraphValues<Tp, N, V>['normal'];

Type parameters

NameDefaultDescription
UNN

Parameters

NameTypeDescription
node1RelatedTo<N, UN>the first connection node
node2RelatedTo<N, UN>the second connectio node
example
const g = ArrowGraphHashed.of([1], [2, 3])
g.disconnect(2, 3).stream().toArray() // => [[1], [2], [3]]
g.disconnect(1, 2).stream().toArray() // => [[1], [2, 3]]

Overrides

VariantGraphBase.disconnect

disconnectAll

Returns the graph with all connections in given links removed if they exist.

Definition

disconnectAll<UN = N>(links: StreamSource<Link<RelatedTo<N, UN>>>): WithGraphValues<Tp, N, V>['normal'];

Type parameters

NameDefaultDescription
UNN

Parameters

NameTypeDescription
linksStreamSource<Link<RelatedTo<N, UN>>>a StreamSource containing tuples of nodes representing connections
example
const g = ArrowGraphHashed.of([1], [2, 3])
g.disconnectAll([[1, 2], [3, 4]]).stream().toArray() // => [[1], [2, 3]]
g.disconnectAll([[2, 3], [3, 4]]).stream().toArray() // => [[1], [2], [3]]

Overrides

VariantGraphBase.disconnectAll

forEach

Performs given function f for each entry of the collection, using given state as initial traversal state.

Definition

forEach(f: (entry: [N] | WithGraphValues<Tp, N, V>['link'], index: number, halt: () => void) => void, options?: {
    state?: TraverseState;
  }): void;

Parameters

NameTypeDescription
f(entry: [N] | WithGraphValues<Tp, N, V>['link'], index: number, halt: () => void) => voidthe function to perform for each entry, receiving:
- entry: the next graph element
- index: the index of the element
- halt: a function that, if called, ensures that no new elements are passed
options{
    state?: TraverseState;
  }
object containing the following
- state: (optional) the traverse state
example
const g = ArrowGraphHashed.of([1], [2, 3], [4])
g.forEach((entry, i, halt) => {
console.log([entry]);
if (i >= 1) halt();
})
// => logs [1] [2, 3]
note

O(N)

Overrides

VariantGraphBase.forEach

getConnectionsFrom

Returns a Map containing the nodes and connection values reachable from given node1 node as keys, and their corresponding values.

Definition

getConnectionsFrom<UN = N>(node1: RelatedTo<N, UN>): WithGraphValues<Tp, N, V>['linkConnections'];

Type parameters

NameDefaultDescription
UNN

Parameters

NameTypeDescription
node1RelatedTo<N, UN>the node from which to find the connections
example
const g = ArrowValuedGraphHashed.of([1, 2, 'a'], [2, 3, 'b'])
g.getConnectionsFrom(1) // => HashMap(2 -> 'a')
g.getConnectionsFrom(3) // => HashMap()

Overrides

ValuedGraphBase.getConnectionsFrom

getConnectionStreamFrom

Returns a Stream containing all the connetions from the given node1

Definition

getConnectionStreamFrom<UN = N>(node1: RelatedTo<N, UN>): Stream<WithGraphValues<Tp, N, V>['link']>;

Type parameters

NameDefaultDescription
UNN

Parameters

NameTypeDescription
node1RelatedTo<N, UN>the first connection node
example
const g = ArrowGraphHashed.of([1], [2, 3])
g.getConnectionStreamFrom(2).toArray() // => [3]
g.getConnectionStreamFrom(5).toArray() // => []

Overrides

VariantGraphBase.getConnectionStreamFrom

getConnectionStreamTo

Returns a Stream containing all the connetions to the given node2

Definition

getConnectionStreamTo<UN = N>(node2: RelatedTo<N, UN>): Stream<WithGraphValues<Tp, N, V>['link']>;

Type parameters

NameDefaultDescription
UNN

Parameters

NameTypeDescription
node2RelatedTo<N, UN>the second connection node
example
const g = ArrowGraphHashed.of([1], [2, 3])
g.getConnectionStreamTo(3).toArray() // => [2]
g.getConnectionStreamTo(5).toArray() // => []

Overrides

VariantGraphBase.getConnectionStreamTo

getValue

Returns the value of the connection between given node1 and node2

Definitions

getValue<UN = N>(node1: RelatedTo<N, UN>, node2: RelatedTo<N, UN>): V | undefined;

getValue<UN, O>(node1: RelatedTo<N, UN>, node2: RelatedTo<N, UN>, otherwise: OptLazy<O>): V | O;

Type parameters

NameDefaultDescription
UNN

Parameters

NameTypeDescription
node1RelatedTo<N, UN>the first connection node
node2RelatedTo<N, UN>the second connection node
example
const g = ArrowValuedGraphHashed.of([1, 2, 'a'], [2, 3, 'b'])
g.getValue(1, 2) // => 'a'
g.getValue(3, 4) // => undefined
g.getValue(1, 2, 'z') // => 'a'
g.getValue(3, 4, 'z') // => 'z'

Overrides

VariantValuedGraphBase.getValue

hasConnection

Returns true if the graph has a connection between given node1 and node2.

Definition

hasConnection<UN = N>(node1: RelatedTo<N, UN>, node2: RelatedTo<N, UN>): boolean;

Type parameters

NameDefaultDescription
UNN

Parameters

NameTypeDescription
node1RelatedTo<N, UN>the first connection node
node2RelatedTo<N, UN>the second connection node
example
const g = ArrowGraphHashed.of([1], [2, 3])
g.hasConnection(2, 3) // => true
g.hasConnection(3, 1) // => false

Overrides

VariantGraphBase.hasConnection

hasNode

Returns true if the graph contains the given node.

Definition

hasNode<UN = N>(node: RelatedTo<N, UN>): boolean;

Type parameters

NameDefaultDescription
UNN

Parameters

NameTypeDescription
nodeRelatedTo<N, UN>the node to search
example
const g = ArrowGraphHashed.of([1], [2, 3])
g.hasNode(2) // => true
g.hasNode(5) // => false

Overrides

VariantGraphBase.hasNode

mapValues

Returns a graph with the same connections, but where the given mapFun function is applied to each connection value.

Definition

mapValues<V2>(mapFun: (value: V, node1: N, node2: N) => V2): WithGraphValues<Tp, N, V2>['normal'];

Type parameters

NameDescription
V2

Parameters

NameTypeDescription
mapFun(value: V, node1: N, node2: N) => V2a function taking a value and connection's node1 and node2, and returning a new value
example
ArrowValuedGraphHashed.of([1, 2, 'a'], [2, 3, 'bc']).mapValues(v => v.length).toArray()
// => [[1, 2, 1], [2, 3, 2]]

Overrides

VariantValuedGraphBase.mapValues

modifyAt

Returns the graph with the connection between given node1 and node2 modified according to given options.

Definition

modifyAt(node1: N, node2: N, options: {
    ifNew?: OptLazyOr<V, Token>;
    ifExists?: ((value: V, remove: Token) => V |Token)| V;
  }): WithGraphValues<Tp, N, V>['normal'];

Parameters

NameTypeDescription
node1Nthe first connection node
node2Nthe second connection node
options{
    ifNew?: OptLazyOr<V, Token>;
    ifExists?: ((value: V, remove: Token) => V |Token)| V;
  }
an object containing the following information:
- ifNew: (optional) if the given connection is not present in the collection, this value or function will be used to generate a new connection. If a function returning the token argument is given, no new entry is created.
- ifExists: (optional) if a value is associated with given connection, this function is called with the given value to return a new value. As a second argument, a remove token is given. If the function returns this token, the current connection is removed.
example
const g = ArrowValuedGraphHashed.of([1, 2, 'a'], [2, 3, 'b'])
g.modifyAt(3, 4, { ifNew: 'c' }).toArray()
// => [[1, 2, 'a'], [2, 3, 'b'], [3, 4, 'c']]
g.modifyAt(3, 4, { ifNew: (none) => 1 < 2 ? none : 'c' }).toArray()
// => [[1, 2, 'a'], [2, 3, 'b']]
g.modifyAt(1, 2, { ifExists: () => 'c' }).toArray()
// => [[1, 2, 'c'], [2, 3, 'b']]
g.modifyAt(1, 2, { ifExists: (v) => v + 'z' }).toArray()
// => [[1, 2, 'az'], [2, 3, 'b']]
g.modifyAt(2, 3, { ifExists: (v, remove) => v === 'a' ? v : remove }).toArray()
// => [[1, 2, 'a']]

Overrides

ValuedGraphBase.modifyAt

nonEmpty

Returns true if there is at least one node in the collection, and instructs the compiler to treat the collection as a .NonEmpty type.

Definition

nonEmpty(): this is WithGraphValues<Tp, N, V>['nonEmpty'];

example
const g: ArrowGraphHashed<number> = ArrowGraphHashed.of([1, 1], [2, 2])
g.streamNodes().first(0) // compiler allows fallback value since the Stream may be empty
if (g.nonEmpty()) {
g.streamNodes().first(0) // compiler error: fallback value not allowed since Stream is not empty
}

Overrides

VariantGraphBase.nonEmpty

removeNode

Returns the graph with the given node and all its connections removed.

Definition

removeNode<UN = N>(node: RelatedTo<N, UN>): WithGraphValues<Tp, N, V>['normal'];

Type parameters

NameDefaultDescription
UNN

Parameters

NameTypeDescription
nodeRelatedTo<N, UN>the node to remove
example
const g = ArrowGraphHashed.of([1], [2, 3])
g.removeNode(2).stream().toArray() // => [[1]]
g.removeNode(6).stream().toArray() // => [[1], [2, 3]]

Overrides

VariantGraphBase.removeNode

removeNodes

Returns the graph with all nodes in given nodes stream removed, together with all their connections.

Definition

removeNodes<UN = N>(nodes: StreamSource<RelatedTo<N, UN>>): WithGraphValues<Tp, N, V>['normal'];

Type parameters

NameDefaultDescription
UNN

Parameters

NameTypeDescription
nodesStreamSource<RelatedTo<N, UN>>a StreamSource containing the nodes to remove
example
const g = ArrowGraphHashed.of([1], [2, 3])
g.removeNodes([2, 3]).stream().toArray() // => [[1]]
g.removeNodes([4, 5]).stream().toArray() // => [[1], [2, 3]]

Overrides

VariantGraphBase.removeNodes

removeUnconnectedNodes

Returns the graph with all isolated nodes removed.

Definition

removeUnconnectedNodes(): WithGraphValues<Tp, N, V>['normal'];

example
const g = ArrowGraphHashed.of([1], [2, 3])
g.removeUnconnectedNodes().stream().toArray() // => [[2, 3]]

Overrides

VariantGraphBase.removeUnconnectedNodes

stream

Returns a Stream containing all graph elements of this collection as single tuples for isolated nodes and 2-valued tuples of nodes for connections.

Definition

stream(): Stream<[N] | WithGraphValues<Tp, N, V>['link']>;

example
ArrowGraphHashed.of([1], [2, 3]).stream().toArray()  // => [[1], [2, 3]]

Overrides

VariantGraphBase.stream

streamConnections

Returns a Stream containing all connections of this collection.

Definition

streamConnections(): Stream<WithGraphValues<Tp, N, V>['link']>;

example
ArrowGraphHashed.of([1], [2, 3]).stream().toArray()   // => [[2, 3]]

Overrides

VariantGraphBase.streamConnections

streamNodes

Returns a Stream containing all nodes of this collection.

Definition

streamNodes(): Stream<N>;

example
ArrowGraphHashed.of([1], [2, 3]).stream().toArray()   // => [1, 2, 3]

Overrides

VariantGraphBase.streamNodes

toBuilder

Returns a builder object containing the entries of this collection.

Definition

toBuilder(): WithGraphValues<Tp, N, V>['builder'];

example
const builder: ArrowValuedGraphHashed.Builder<number, string> = ArrowValuedGraphHashed.of([1, 2, 'a'], [2, 3, 'b']).toBuilder()

Overrides

ValuedGraphBase.toBuilder

toJSON

Returns a JSON representation of this collection.

Definition

toJSON(): ToJSON<[N, WithGraphValues<Tp, N, V>['linkTarget'][]][]>;

example
ArrowGraphHashed.of([1], [2, 3]).toJSON()
// => { dataType: 'ArrowGraphHashed', value: [[1, []], [2, [3]]] }

Overrides

VariantGraphBase.toJSON

toString

Returns a string representation of this collection.

Definition

toString(): string;

example
ArrowGraphHashed.of([1], [2, 3]).toString()   // => ArrowGraphHashed(1 => [], 2 => [3])

Overrides

VariantGraphBase.toString