@Override public void addConnections(Iterable<? extends Connection<E>> connections) { for (final Connection<E> connection : connections) { addConnection(connection); } }
@Override public Optional<E> removeConnectionData(Point from, Point to) { return changeConnectionData(from, to, Optional.<E>absent()); }
/** * Change connection data. Precondition: connection from -> to exists. * @param from Start point of connection. * @param to End point of connection. * @param connData The connection data used for the connection. * @return old connection data or {@link Optional#absent()} if there was no * connection data. * @throws IllegalArgumentException if the connection between the nodes does * not exist. */ protected Optional<E> changeConnectionData(Point from, Point to, Optional<E> connData) { checkArgument(hasConnection(from, to), "The connection %s->%s does not exist.", from, to); return doChangeConnectionData(from, to, connData); }
@Override public double connectionLength(Point from, Point to) { checkArgument(hasConnection(from, to), "Can not get connection length from a non-existing connection."); final Optional<E> connData = connectionData(from, to); return connData.isPresent() && connData.get().getLength().isPresent() ? connData.get().getLength().get() : Point.distance(from, to); }
/** * Adds a connection. * @param from Start of the connection. * @param to End of the connection. * @param connData The connection data wrapped in an optional. */ protected void addConnection(Point from, Point to, Optional<E> connData) { checkArgument(!from.equals(to), "A connection cannot be circular: %s -> %s ", from, to); checkArgument(!hasConnection(from, to), "Connection already exists: %s -> %s ", from, to); doAddConnection(from, to, connData); }
@Override public Point getRandomNode(RandomGenerator generator) { checkState(!isEmpty(), "Can not find a random node in an empty graph."); final Set<Point> nodes = getNodes(); final int idx = generator.nextInt(nodes.size()); int index = 0; for (final Point point : nodes) { if (idx == index++) { return point; } } throw new IllegalStateException(); }
@Override public Connection<E> getRandomConnection( RandomGenerator generator) { checkState(!isEmpty(), "Can not find a random connection in an empty graph."); final Set<Connection<E>> conns = getConnections(); final int idx = generator.nextInt(conns.size()); int index = 0; for (final Connection<E> conn : conns) { if (idx == index++) { return conn; } } throw new IllegalStateException(); }
@Override public void merge(Graph<E> other) { addConnections(other.getConnections()); }
@Override public double connectionLength(Point from, Point to) { checkArgument(hasConnection(from, to), "Can not get connection length from a non-existing connection."); final Optional<E> connData = connectionData(from, to); return connData.isPresent() && connData.get().getLength().isPresent() ? connData.get().getLength().get() : Point.distance(from, to); }
/** * Adds a connection. * @param from Start of the connection. * @param to End of the connection. * @param connData The connection data wrapped in an optional. */ protected void addConnection(Point from, Point to, Optional<E> connData) { checkArgument(!from.equals(to), "A connection cannot be circular: %s -> %s ", from, to); checkArgument(!hasConnection(from, to), "Connection already exists: %s -> %s ", from, to); doAddConnection(from, to, connData); }
@Override public Point getRandomNode(RandomGenerator generator) { checkState(!isEmpty(), "Can not find a random node in an empty graph."); final Set<Point> nodes = getNodes(); final int idx = generator.nextInt(nodes.size()); int index = 0; for (final Point point : nodes) { if (idx == index++) { return point; } } throw new IllegalStateException(); }
@Override public Connection<E> getRandomConnection( RandomGenerator generator) { checkState(!isEmpty(), "Can not find a random connection in an empty graph."); final Set<Connection<E>> conns = getConnections(); final int idx = generator.nextInt(conns.size()); int index = 0; for (final Connection<E> conn : conns) { if (idx == index++) { return conn; } } throw new IllegalStateException(); }
@Override public void merge(Graph<E> other) { addConnections(other.getConnections()); }
@Override public void addConnections(Iterable<? extends Connection<E>> connections) { for (final Connection<E> connection : connections) { addConnection(connection); } }
/** * Change connection data. Precondition: connection from -> to exists. * @param from Start point of connection. * @param to End point of connection. * @param connData The connection data used for the connection. * @return old connection data or {@link Optional#absent()} if there was no * connection data. * @throws IllegalArgumentException if the connection between the nodes does * not exist. */ protected Optional<E> changeConnectionData(Point from, Point to, Optional<E> connData) { checkArgument(hasConnection(from, to), "The connection %s->%s does not exist.", from, to); return doChangeConnectionData(from, to, connData); }
@Override public Optional<E> setConnectionData(Point from, Point to, E connData) { return changeConnectionData(from, to, Optional.of(connData)); }
@Override public void addConnection(Point from, Point to, E connData) { addConnection(from, to, Optional.of(connData)); }
@Override public Optional<E> setConnectionData(Point from, Point to, E connData) { return changeConnectionData(from, to, Optional.of(connData)); }
@Override public void addConnection(Point from, Point to) { addConnection(from, to, Optional.<E>absent()); }
@Override public Optional<E> removeConnectionData(Point from, Point to) { return changeConnectionData(from, to, Optional.<E>absent()); }