static <N, E> DirectedMultiNetworkConnections<N, E> ofImmutable( Map<E, N> inEdges, Map<E, N> outEdges, int selfLoopCount) { return new DirectedMultiNetworkConnections<>( ImmutableMap.copyOf(inEdges), ImmutableMap.copyOf(outEdges), selfLoopCount); }
private Multiset<N> predecessorsMultiset() { Multiset<N> predecessors = getReference(predecessorsReference); if (predecessors == null) { predecessors = HashMultiset.create(inEdgeMap.values()); predecessorsReference = new SoftReference<>(predecessors); } return predecessors; }
@Override public Set<N> predecessors() { return Collections.unmodifiableSet(predecessorsMultiset().elementSet()); }
private NetworkConnections<N, E> newConnections() { return isDirected() ? allowsParallelEdges() ? DirectedMultiNetworkConnections.<N, E>of() : DirectedNetworkConnections.<N, E>of() : allowsParallelEdges() ? UndirectedMultiNetworkConnections.<N, E>of() : UndirectedNetworkConnections.<N, E>of(); } }
@Override public Set<N> successors() { return Collections.unmodifiableSet(successorsMultiset().elementSet()); }
private static <N, E> NetworkConnections<N, E> connectionsOf(Network<N, E> network, N node) { if (network.isDirected()) { Map<E, N> inEdgeMap = Maps.asMap(network.inEdges(node), sourceNodeFn(network)); Map<E, N> outEdgeMap = Maps.asMap(network.outEdges(node), targetNodeFn(network)); int selfLoopCount = network.edgesConnecting(node, node).size(); return network.allowsParallelEdges() ? DirectedMultiNetworkConnections.ofImmutable(inEdgeMap, outEdgeMap, selfLoopCount) : DirectedNetworkConnections.ofImmutable(inEdgeMap, outEdgeMap, selfLoopCount); } else { Map<E, N> incidentEdgeMap = Maps.asMap(network.incidentEdges(node), adjacentNodeFn(network, node)); return network.allowsParallelEdges() ? UndirectedMultiNetworkConnections.ofImmutable(incidentEdgeMap) : UndirectedNetworkConnections.ofImmutable(incidentEdgeMap); } }
private NetworkConnections<N, E> newConnections() { return isDirected() ? allowsParallelEdges() ? DirectedMultiNetworkConnections.<N, E>of() : DirectedNetworkConnections.<N, E>of() : allowsParallelEdges() ? UndirectedMultiNetworkConnections.<N, E>of() : UndirectedNetworkConnections.<N, E>of(); } }
@Override public Set<N> successors() { return Collections.unmodifiableSet(successorsMultiset().elementSet()); }
private static <N, E> NetworkConnections<N, E> connectionsOf(Network<N, E> network, N node) { if (network.isDirected()) { Map<E, N> inEdgeMap = Maps.asMap(network.inEdges(node), sourceNodeFn(network)); Map<E, N> outEdgeMap = Maps.asMap(network.outEdges(node), targetNodeFn(network)); int selfLoopCount = network.edgesConnecting(node, node).size(); return network.allowsParallelEdges() ? DirectedMultiNetworkConnections.ofImmutable(inEdgeMap, outEdgeMap, selfLoopCount) : DirectedNetworkConnections.ofImmutable(inEdgeMap, outEdgeMap, selfLoopCount); } else { Map<E, N> incidentEdgeMap = Maps.asMap(network.incidentEdges(node), adjacentNodeFn(network, node)); return network.allowsParallelEdges() ? UndirectedMultiNetworkConnections.ofImmutable(incidentEdgeMap) : UndirectedNetworkConnections.ofImmutable(incidentEdgeMap); } }
private Multiset<N> successorsMultiset() { Multiset<N> successors = getReference(successorsReference); if (successors == null) { successors = HashMultiset.create(outEdgeMap.values()); successorsReference = new SoftReference<>(successors); } return successors; }
static <N, E> DirectedMultiNetworkConnections<N, E> of() { return new DirectedMultiNetworkConnections<>( new HashMap<E, N>(INNER_CAPACITY, INNER_LOAD_FACTOR), new HashMap<E, N>(INNER_CAPACITY, INNER_LOAD_FACTOR), 0); }
private NetworkConnections<N, E> newConnections() { return isDirected() ? allowsParallelEdges() ? DirectedMultiNetworkConnections.<N, E>of() : DirectedNetworkConnections.<N, E>of() : allowsParallelEdges() ? UndirectedMultiNetworkConnections.<N, E>of() : UndirectedNetworkConnections.<N, E>of(); } }
@Override public Set<N> predecessors() { return Collections.unmodifiableSet(predecessorsMultiset().elementSet()); }
@Override public Set<N> successors() { return Collections.unmodifiableSet(successorsMultiset().elementSet()); }
private static <N, E> NetworkConnections<N, E> connectionsOf(Network<N, E> network, N node) { if (network.isDirected()) { Map<E, N> inEdgeMap = Maps.asMap(network.inEdges(node), sourceNodeFn(network)); Map<E, N> outEdgeMap = Maps.asMap(network.outEdges(node), targetNodeFn(network)); int selfLoopCount = network.edgesConnecting(node, node).size(); return network.allowsParallelEdges() ? DirectedMultiNetworkConnections.ofImmutable(inEdgeMap, outEdgeMap, selfLoopCount) : DirectedNetworkConnections.ofImmutable(inEdgeMap, outEdgeMap, selfLoopCount); } else { Map<E, N> incidentEdgeMap = Maps.asMap(network.incidentEdges(node), adjacentNodeFn(network, node)); return network.allowsParallelEdges() ? UndirectedMultiNetworkConnections.ofImmutable(incidentEdgeMap) : UndirectedNetworkConnections.ofImmutable(incidentEdgeMap); } }
@Override public void addOutEdge(E edge, N node) { super.addOutEdge(edge, node); Multiset<N> successors = getReference(successorsReference); if (successors != null) { checkState(successors.add(node)); } }
static <N, E> DirectedMultiNetworkConnections<N, E> ofImmutable( Map<E, N> inEdges, Map<E, N> outEdges, int selfLoopCount) { return new DirectedMultiNetworkConnections<>( ImmutableMap.copyOf(inEdges), ImmutableMap.copyOf(outEdges), selfLoopCount); }
private NetworkConnections<N, E> newConnections() { return isDirected() ? allowsParallelEdges() ? DirectedMultiNetworkConnections.<N, E>of() : DirectedNetworkConnections.<N, E>of() : allowsParallelEdges() ? UndirectedMultiNetworkConnections.<N, E>of() : UndirectedNetworkConnections.<N, E>of(); } }
@Override public Set<N> predecessors() { return Collections.unmodifiableSet(predecessorsMultiset().elementSet()); }
@Override public Set<N> successors() { return Collections.unmodifiableSet(successorsMultiset().elementSet()); }