diff --git a/src/main/java/com/syncleus/dann/graph/AbstractAdjacencyGraph.java b/src/main/java/com/syncleus/dann/graph/AbstractAdjacencyGraph.java
index 504fa486031f13d5aa3a974ae923e4306acadbe9..27502ea6a8c1f23c7c6416c1e29fc889b7c2fa32 100644
--- a/src/main/java/com/syncleus/dann/graph/AbstractAdjacencyGraph.java
+++ b/src/main/java/com/syncleus/dann/graph/AbstractAdjacencyGraph.java
@@ -36,7 +36,7 @@ import java.util.*;
@XmlJavaTypeAdapter( com.syncleus.dann.xml.XmlSerializableAdapter.class )
public abstract class AbstractAdjacencyGraph<
N,
- E extends Edge<N,? extends Edge.Endpoint<N>>,
+ E extends Edge<N,? extends Edge.Endpoint<? extends N>>,
NEP extends Graph.NodeEndpoint<N, E>,
EEP extends Graph.EdgeEndpoint<N, E>
> extends AbstractEdge<Object,Graph.Endpoint<N,E,?>> implements Graph<N, E, NEP, EEP>
@@ -529,7 +529,7 @@ public abstract class AbstractAdjacencyGraph<
}
*/
- protected abstract Set<EdgeEndpoint<N,E>> getAdjacentEdgeEndpoint(Graph.NodeEndpoint<? extends N,? extends E> nodeEndpoint);
+ protected abstract Set<EdgeEndpoint<N,E>> getAdjacentEdgeEndpoints(Graph.NodeEndpoint<? extends N, ? extends E> nodeEndpoint);
protected PathFinder<N,E> getPathFinder()
{
@@ -977,13 +977,35 @@ public abstract class AbstractAdjacencyGraph<
}
}
*/
- protected abstract class AbstractNodeEndpoint extends AbstractEdge<N,Graph.NodeEndpoint<N,E>>.AbstractEndpoint implements Graph.NodeEndpoint<N,E>
+
+ protected abstract class AbstractNodeEndpoint extends AbstractEdge<? super N,Graph.Endpoint<N,E,? super N>>.AbstractEndpoint<N> implements Graph.NodeEndpoint<N,E>
{
+ protected AbstractNodeEndpoint()
+ {
+ }
@Override
public Set<Graph.EdgeEndpoint<N, E>> getAdjacentEdges()
{
- return getAdjacentEdgeEndpoint(this);
+ return getAdjacentEdgeEndpoints(this);
+ }
+
+ @Override
+ public Set<? extends Graph.EdgeEndpoint<N, E>> getAdjacent()
+ {
+ return getAdjacentEdges();
+ }
+
+ @Override
+ public Set<? extends Graph.EdgeEndpoint<N, E>> getTraversableAdjacentTo()
+ {
+ return this.getTraversableAdjacentEdgesTo();
+ }
+
+ @Override
+ public Set<? extends Graph.EdgeEndpoint<N, E>> getTraversableAdjacentFrom()
+ {
+ return this.getTraversableAdjacentEdgesFrom();
}
@Override
@@ -1052,8 +1074,30 @@ public abstract class AbstractAdjacencyGraph<
}
};
- protected abstract class AbstractEdgeEndpoint extends AbstractEdge<E,Graph.Endpoint<N,E,E>>.AbstractEndpoint implements Graph.EdgeEndpoint<N,E>
+ protected abstract class AbstractEdgeEndpoint extends AbstractEdge<? super E,Graph.Endpoint<N,E,? super E>>.AbstractEndpoint<E> implements Graph.EdgeEndpoint<N,E>
{
+ protected AbstractEdgeEndpoint()
+ {
+ }
+
+ @Override
+ public Set<Graph.NodeEndpoint<N, E>> getAdjacent()
+ {
+ return this.getAdjacentNodes();
+ }
+
+ @Override
+ public Set<Graph.NodeEndpoint<N, E>> getTraversableAdjacentTo()
+ {
+ return this.getTraversableAdjacentNodesTo();
+ }
+
+ @Override
+ public Set<Graph.NodeEndpoint<N, E>> getTraversableAdjacentFrom()
+ {
+ return this.getTraversableAdjacentNodesFrom();
+ }
+
@Override
public Set<Graph.NodeEndpoint<N, E>> getAdjacentNodes()
{
@@ -1072,7 +1116,7 @@ public abstract class AbstractAdjacencyGraph<
for(Endpoint<? extends N> sourceEndpoint : this.getTarget().getEndpoints())
for( NEP neighborNode : AbstractAdjacencyGraph.this.getNodeEndpoints(sourceEndpoint.getTarget()) )
- adjacentEdges.addAll(AbstractAdjacencyGraph.this.getAdjacentEdgeEndpoint(neighborNode));
+ adjacentEdges.addAll(AbstractAdjacencyGraph.this.getAdjacentEdgeEndpoints(neighborNode));
adjacentEdges.remove(this);
return Collections.unmodifiableSet(adjacentEdges);
@@ -1086,7 +1130,7 @@ public abstract class AbstractAdjacencyGraph<
for(Endpoint<? extends N> sourceEndpoint : this.getTarget().getEndpoints())
if( sourceEndpoint.getTraversableNeighborsFrom().size() > 0 )
for( NEP adjacentNode : AbstractAdjacencyGraph.this.getNodeEndpoints(sourceEndpoint.getTarget()))
- for( Graph.EdgeEndpoint<N, E> adjacentEdge : AbstractAdjacencyGraph.this.getAdjacentEdgeEndpoint(adjacentNode) )
+ for( Graph.EdgeEndpoint<N, E> adjacentEdge : AbstractAdjacencyGraph.this.getAdjacentEdgeEndpoints(adjacentNode) )
if( adjacentEdge.getTarget().getTraversableFrom(adjacentNode.getTarget()).size() > 0 )
adjacentEdges.add(adjacentEdge);
@@ -1101,7 +1145,7 @@ public abstract class AbstractAdjacencyGraph<
for(Endpoint<? extends N> sourceEndpoint : this.getTarget().getEndpoints())
if( sourceEndpoint.getTraversableNeighborsTo().size() > 0 )
for( NEP adjacentNode : AbstractAdjacencyGraph.this.getNodeEndpoints(sourceEndpoint.getTarget()))
- for( Graph.EdgeEndpoint<N, E> adjacentEdge : AbstractAdjacencyGraph.this.getAdjacentEdgeEndpoint(adjacentNode) )
+ for( Graph.EdgeEndpoint<N, E> adjacentEdge : AbstractAdjacencyGraph.this.getAdjacentEdgeEndpoints(adjacentNode) )
if( adjacentEdge.getTarget().getTraversableTo(adjacentNode.getTarget()).size() > 0 )
adjacentEdges.add(adjacentEdge);
diff --git a/src/main/java/com/syncleus/dann/graph/AbstractEdge.java b/src/main/java/com/syncleus/dann/graph/AbstractEdge.java
index 18ff8eb2b7450e5febe08a5e2ebd944530847673..364d32006c09269c9bb7b214050b6a2cbf921d97 100644
--- a/src/main/java/com/syncleus/dann/graph/AbstractEdge.java
+++ b/src/main/java/com/syncleus/dann/graph/AbstractEdge.java
@@ -28,9 +28,9 @@ import com.syncleus.dann.xml.XmlSerializable;
import org.apache.log4j.Logger;
public abstract class AbstractEdge<
- PA,
- EP extends Edge.Endpoint<? extends PA>
- > implements Edge<PA,EP>
+ T,
+ EP extends Edge.Endpoint<? extends T>
+ > implements Edge<T,EP>
{
private static final Logger LOGGER = Logger.getLogger(AbstractEdge.class);
@@ -62,9 +62,9 @@ public abstract class AbstractEdge<
}
@Override
- public Set<PA> getTargets()
+ public Set<T> getTargets()
{
- final Set<PA> nodes = new HashSet<PA>();
+ final Set<T> nodes = new HashSet<T>();
for( EP endpoint : this.getEndpoints() )
nodes.add(endpoint.getTarget());
@@ -83,33 +83,33 @@ public abstract class AbstractEdge<
}
@Override
- public Set<PA> getNeighbors(final Object source)
+ public Set<T> getNeighbors(final Object source)
{
- final Set<PA> nodes = new HashSet<PA>();
+ final Set<T> nodes = new HashSet<T>();
for( final EP sourceEndpoint : this.getEndpoints(source) )
- for( final Edge.Endpoint<? extends PA> fromEndpoint : sourceEndpoint.getNeighbors())
+ for( final Edge.Endpoint<? extends T> fromEndpoint : sourceEndpoint.getNeighbors())
nodes.add(fromEndpoint.getTarget());
return Collections.unmodifiableSet(nodes);
}
@Override
- public Set<PA> getTraversableFrom(Object source)
+ public Set<T> getTraversableFrom(Object source)
{
- final Set<PA> nodes = new HashSet<PA>();
+ final Set<T> nodes = new HashSet<T>();
for( final EP sourceEndpoint : this.getEndpoints(source) )
- for( final Edge.Endpoint<? extends PA> fromEndpoint : sourceEndpoint.getTraversableNeighborsFrom())
+ for( final Edge.Endpoint<? extends T> fromEndpoint : sourceEndpoint.getTraversableNeighborsFrom())
nodes.add(fromEndpoint.getTarget());
return Collections.unmodifiableSet(nodes);
}
@Override
- public Set<PA> getTraversableTo(Object destination)
+ public Set<T> getTraversableTo(Object destination)
{
- final Set<PA> nodes = new HashSet<PA>();
+ final Set<T> nodes = new HashSet<T>();
for( final EP destinationEndpoint : this.getEndpoints(destination) )
- for( final Edge.Endpoint<? extends PA> fromEndpoint : destinationEndpoint.getTraversableNeighborsTo())
+ for( final Edge.Endpoint<? extends T> fromEndpoint : destinationEndpoint.getTraversableNeighborsTo())
nodes.add(fromEndpoint.getTarget());
return Collections.unmodifiableSet(nodes);
@@ -125,7 +125,7 @@ public abstract class AbstractEdge<
public String toString()
{
final StringBuilder outString = new StringBuilder(this.getTargets().size() * 10);
- for(final PA node : this.getTargets())
+ for(final T node : this.getTargets())
{
outString.append(':').append(node);
}
@@ -133,11 +133,11 @@ public abstract class AbstractEdge<
}
@Override
- protected AbstractEdge<PA,EP> clone()
+ protected AbstractEdge<T,EP> clone()
{
try
{
- return (AbstractEdge<PA,EP>) super.clone();
+ return (AbstractEdge<T,EP>) super.clone();
}
catch(CloneNotSupportedException caught)
{
@@ -153,8 +153,8 @@ public abstract class AbstractEdge<
final EdgeElementXml xml = new EdgeElementXml();
xml.setNodeInstances(new EdgeElementXml.NodeInstances());
- final Set<PA> writtenNodes = new HashSet<PA>();
- for (PA node : this.getTargets())
+ final Set<T> writtenNodes = new HashSet<T>();
+ for (T node : this.getTargets())
{
if (writtenNodes.add(node))
{
@@ -205,7 +205,7 @@ public abstract class AbstractEdge<
{
jaxbObject.setConnections(new EdgeXml.Connections());
}
- for (PA node : this.getTargets())
+ for (T node : this.getTargets())
{
final NameXml connection = new NameXml();
connection.setName(nodeNames.getNameOrCreate(node));
@@ -213,33 +213,33 @@ public abstract class AbstractEdge<
}
}
- protected abstract class AbstractEndpoint implements Edge.Endpoint<PA>
+ protected abstract class AbstractEndpoint<T> implements Edge.Endpoint<T>
{
protected AbstractEndpoint()
{
}
@Override
- public Set<Edge.Endpoint<PA>> getNeighbors()
+ public Set<Edge.Endpoint<? extends T>> getNeighbors()
{
return new NeighborSet();
}
@Override
- public Set<Edge.Endpoint<PA>> getTraversableNeighborsTo()
+ public Set<Edge.Endpoint<? extends T>> getTraversableNeighborsTo()
{
- final Set<Edge.Endpoint<PA>> traversables = new HashSet<Edge.Endpoint<PA>>();
- for(Edge.Endpoint<PA> neighbor : this.getNeighbors())
+ final Set<Edge.Endpoint<? extends T>> traversables = new HashSet<Edge.Endpoint<? extends T>>();
+ for(Edge.Endpoint<? extends T> neighbor : this.getNeighbors())
if( AbstractEdge.this.isTraversable(this.getTarget(),neighbor.getTarget()) )
traversables.add(neighbor);
return Collections.unmodifiableSet(traversables);
}
@Override
- public Set<Edge.Endpoint<PA>> getTraversableNeighborsFrom()
+ public Set<Edge.Endpoint<? extends T>> getTraversableNeighborsFrom()
{
- final Set<Edge.Endpoint<PA>> traversables = new HashSet<Edge.Endpoint<PA>>();
- for(Edge.Endpoint<PA> neighbor : this.getNeighbors())
+ final Set<Edge.Endpoint<? extends T>> traversables = new HashSet<Edge.Endpoint<? extends T>>();
+ for(Edge.Endpoint<? extends T> neighbor : this.getNeighbors())
if( AbstractEdge.this.isTraversable(this.getTarget(),neighbor.getTarget()) )
traversables.add(neighbor);
return Collections.unmodifiableSet(traversables);
@@ -257,13 +257,7 @@ public abstract class AbstractEdge<
return AbstractEdge.this.isTraversable(this.getTarget(), destination.getTarget());
}
- @Override
- public boolean isTraversable(Object destination)
- {
- return AbstractEdge.this.isTraversable(this.getTarget(), destination);
- }
-
- private class NeighborSet implements Set<Edge.Endpoint<PA>>
+ private class NeighborSet implements Set<Edge.Endpoint<? extends T>>
{
@Override
public int size()
@@ -287,7 +281,7 @@ public abstract class AbstractEdge<
}
@Override
- public Iterator<Edge.Endpoint<PA>> iterator()
+ public Iterator<Edge.Endpoint<? extends T>> iterator()
{
return new NeighborIterator();
}
@@ -309,7 +303,7 @@ public abstract class AbstractEdge<
}
@Override
- public boolean add(Edge.Endpoint<PA> nEndpoint)
+ public boolean add(Edge.Endpoint<? extends T> nEndpoint)
{
throw new UnsupportedOperationException("This set is read-only!");
}
@@ -329,7 +323,7 @@ public abstract class AbstractEdge<
}
@Override
- public boolean addAll(Collection<? extends Edge.Endpoint<PA>> c)
+ public boolean addAll(Collection<? extends Edge.Endpoint<? extends T>> c)
{
throw new UnsupportedOperationException("This set is read-only!");
}
@@ -358,10 +352,10 @@ public abstract class AbstractEdge<
throw new UnsupportedOperationException("This set is read-only!");
}
- private class NeighborIterator implements Iterator<Edge.Endpoint<PA>>
+ private class NeighborIterator implements Iterator<Edge.Endpoint<? extends T>>
{
private int nextLeft = (getEndpoints().size()-1);
- final private Iterator<EP> iterator;
+ final private Iterator<? extends Endpoint<?>> iterator;
public NeighborIterator()
{
@@ -375,13 +369,13 @@ public abstract class AbstractEdge<
}
@Override
- public Edge.Endpoint<PA> next()
+ public Edge.Endpoint<T> next()
{
- Edge.Endpoint<? extends PA> nextEndpoint = this.iterator.next();
+ Edge.Endpoint<?> nextEndpoint = this.iterator.next();
this.nextLeft--;
if( !AbstractEndpoint.this.equals(nextEndpoint) )
- return (Edge.Endpoint<PA>) nextEndpoint;
+ return (Edge.Endpoint<T>) nextEndpoint;
return next();
}
diff --git a/src/main/java/com/syncleus/dann/graph/AbstractMutableAdjacencyGraph.java b/src/main/java/com/syncleus/dann/graph/AbstractMutableAdjacencyGraph.java
index 5435f4149cef17d92052cceabb478913c4ec1007..aa446f41e775500e3c004b29add30fffecffc801 100644
--- a/src/main/java/com/syncleus/dann/graph/AbstractMutableAdjacencyGraph.java
+++ b/src/main/java/com/syncleus/dann/graph/AbstractMutableAdjacencyGraph.java
@@ -23,8 +23,8 @@ import java.util.*;
public abstract class AbstractMutableAdjacencyGraph<
N,
E extends Edge<N,? extends Edge.Endpoint<N>>,
- NEP extends MutableGraph.NodeEndpoint<? extends N, ? extends E>,
- EEP extends MutableGraph.EdgeEndpoint<? extends N, ? extends E>
+ NEP extends MutableGraph.NodeEndpoint<N, E>,
+ EEP extends MutableGraph.EdgeEndpoint<N, E>
>
extends AbstractAdjacencyGraph<N, E, NEP, EEP>
implements MutableGraph<N, E, NEP, EEP>
@@ -61,11 +61,11 @@ public abstract class AbstractMutableAdjacencyGraph<
}
@Override
- protected Set<Graph.EdgeEndpoint<? extends N,? extends E>> getAdjacentEdgeEndpoint(Graph.NodeEndpoint<? extends N,? extends E> nodeEndpoint)
+ protected Set<Graph.EdgeEndpoint<N,E>> getAdjacentEdgeEndpoints(Graph.NodeEndpoint<? extends N, ? extends E> nodeEndpoint)
{
if( !this.adjacency.getLeftKeys().contains(nodeEndpoint) )
throw new IllegalArgumentException("nodeEndpoint is not an endpoint for this graph");
- return Collections.<EdgeEndpoint<? extends N,? extends E>>unmodifiableSet(this.adjacency.getLeftAdjacency(nodeEndpoint));
+ return Collections.<EdgeEndpoint<N,E>>unmodifiableSet(this.adjacency.getLeftAdjacency(nodeEndpoint));
}
protected abstract NEP createNodeEndpoint(N node) throws InvalidGraphException;
@@ -202,6 +202,13 @@ public abstract class AbstractMutableAdjacencyGraph<
@Override
public Map<?, Graph.Endpoint<N, E, ?>> reconfigure(Set<? extends N> addNodes, Set<? extends E> addEdges, Set<? extends Graph.Endpoint<?, ?, ?>> disconnectEndpoints) throws InvalidGraphException
{
+ for(final Graph.Endpoint<?,?,?> disconnectEndpoint : disconnectEndpoints)
+ this.adjacency.remove(disconnectEndpoint.getTarget());
+
+ Map<Object, Graph.Endpoint<N,E,?>> newEndpoints = new HashMap<Object, Graph.Endpoint<N, E, ?>>();
+ newEndpoints.putAll(this.joinNodes(addNodes));
+ newEndpoints.putAll(this.joinEdges(addEdges));
+ return newEndpoints;
}
@Override
@@ -305,4 +312,12 @@ public abstract class AbstractMutableAdjacencyGraph<
}
};
*/
+
+ protected abstract class AbstractNodeEndpoint extends AbstractAdjacencyGraph<N,E,NEP,EEP>.AbstractNodeEndpoint implements MutableGraph.NodeEndpoint<N, E>
+ {
+ }
+
+ protected abstract class AbstractEdgeEndpoint extends AbstractAdjacencyGraph<N,E,NEP,EEP>.AbstractEdgeEndpoint implements MutableGraph.EdgeEndpoint<N, E>
+ {
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/syncleus/dann/graph/AssignableGraph.java b/src/main/java/com/syncleus/dann/graph/AssignableGraph.java
index 034a0c2a9834efa1907a891dcae3db787d553708..8226c11a43e302d72b5185cbd8654f9ea5d11f4c 100644
--- a/src/main/java/com/syncleus/dann/graph/AssignableGraph.java
+++ b/src/main/java/com/syncleus/dann/graph/AssignableGraph.java
@@ -20,7 +20,7 @@ package com.syncleus.dann.graph;
public interface AssignableGraph<
N,
- E extends Edge<N,? extends Edge.Endpoint<N>>,
+ E extends Edge<N,? extends Edge.Endpoint<? extends N>>,
NEP extends AssignableGraph.NodeEndpoint<N, E>,
EEP extends AssignableGraph.EdgeEndpoint<N, E>
> extends Graph<N,E,NEP,EEP>, MutableEdge<Object,Graph.Endpoint<N,E,?>>
@@ -45,7 +45,7 @@ public interface AssignableGraph<
interface NodeEndpoint<
ON,
- OE extends Edge<ON,? extends Edge.Endpoint<ON>>
+ OE extends Edge<ON,? extends Edge.Endpoint<? extends ON>>
> extends Graph.NodeEndpoint<ON,OE>, MutableEdge.Endpoint<ON>
{
void setTarget(ON newTarget) throws InvalidGraphException;
@@ -53,7 +53,7 @@ public interface AssignableGraph<
interface EdgeEndpoint<
ON,
- OE extends Edge<ON,? extends Edge.Endpoint<ON>>
+ OE extends Edge<ON,? extends Edge.Endpoint<? extends ON>>
> extends Graph.EdgeEndpoint<ON,OE>, MutableEdge.Endpoint<OE>
{
void setTarget(OE newTarget) throws InvalidGraphException;
diff --git a/src/main/java/com/syncleus/dann/graph/Edge.java b/src/main/java/com/syncleus/dann/graph/Edge.java
index d14109e634675a11570d6de5bae40fa2ea2b2013..9a25dcf85e9d122ffdef96b7fef9f8e894c55cce 100644
--- a/src/main/java/com/syncleus/dann/graph/Edge.java
+++ b/src/main/java/com/syncleus/dann/graph/Edge.java
@@ -32,12 +32,11 @@ public interface Edge<
{
interface Endpoint<T>
{
- Set<Edge.Endpoint<T>> getNeighbors();
- Set<Edge.Endpoint<T>> getTraversableNeighborsTo();
- Set<Edge.Endpoint<T>> getTraversableNeighborsFrom();
+ Set<? extends Edge.Endpoint<? extends T>> getNeighbors();
+ Set<? extends Edge.Endpoint<? extends T>> getTraversableNeighborsTo();
+ Set<? extends Edge.Endpoint<? extends T>> getTraversableNeighborsFrom();
boolean isTraversable();
boolean isTraversable(Edge.Endpoint<?> destination);
- boolean isTraversable(Object destination);
T getTarget();
};
diff --git a/src/main/java/com/syncleus/dann/graph/Graph.java b/src/main/java/com/syncleus/dann/graph/Graph.java
index 6edcfdd4a28a63e354d95aaaa9011dd73632cb8b..2005599d8ccd0cac438ef08a776959c66977de0a 100644
--- a/src/main/java/com/syncleus/dann/graph/Graph.java
+++ b/src/main/java/com/syncleus/dann/graph/Graph.java
@@ -37,40 +37,40 @@ import java.util.Set;
*/
public interface Graph<
N,
- E extends Edge<N,? extends Edge.Endpoint<N>>,
+ E extends Edge<N,? extends Edge.Endpoint<? extends N>>,
NEP extends Graph.NodeEndpoint<N, E>,
EEP extends Graph.EdgeEndpoint<N, E>
> extends Edge<Object,Graph.Endpoint<N,E,?>>, Serializable, Cloneable, ContextReporter
{
interface Endpoint<
ON,
- OE extends Edge<ON,? extends Edge.Endpoint<ON>>,
+ OE extends Edge<ON,? extends Edge.Endpoint<? extends ON>>,
T
> extends Edge.Endpoint<T>
{
- Set<Graph.Endpoint<ON,OE,T>> getAdjacent();
- Set<Graph.Endpoint<ON,OE,T>> getTraversableAdjacentTo();
- Set<Graph.Endpoint<ON,OE,T>> getTraversableAdjacentFrom();
+ Set<? extends Graph.Endpoint<ON,OE,?>> getAdjacent();
+ Set<? extends Graph.Endpoint<ON,OE,?>> getTraversableAdjacentTo();
+ Set<? extends Graph.Endpoint<ON,OE,?>> getTraversableAdjacentFrom();
- Set<Graph.NodeEndpoint<ON, OE>> getAdjacentNodes();
- Set<Graph.NodeEndpoint<ON, OE>> getTraversableAdjacentNodesTo();
- Set<Graph.NodeEndpoint<ON, OE>> getTraversableAdjacentNodesFrom();
+ Set<? extends Graph.NodeEndpoint<ON, OE>> getAdjacentNodes();
+ Set<? extends Graph.NodeEndpoint<ON, OE>> getTraversableAdjacentNodesTo();
+ Set<? extends Graph.NodeEndpoint<ON, OE>> getTraversableAdjacentNodesFrom();
- Set<Graph.EdgeEndpoint<ON, OE>> getAdjacentEdges();
- Set<Graph.EdgeEndpoint<ON, OE>> getTraversableAdjacentEdgesTo();
- Set<Graph.EdgeEndpoint<ON, OE>> getTraversableAdjacentEdgesFrom();
+ Set<? extends Graph.EdgeEndpoint<ON, OE>> getAdjacentEdges();
+ Set<? extends Graph.EdgeEndpoint<ON, OE>> getTraversableAdjacentEdgesTo();
+ Set<? extends Graph.EdgeEndpoint<ON, OE>> getTraversableAdjacentEdgesFrom();
};
interface NodeEndpoint<
ON,
- OE extends Edge<ON,? extends Edge.Endpoint<ON>>
+ OE extends Edge<ON,? extends Edge.Endpoint<? extends ON>>
> extends Graph.Endpoint<ON,OE,ON>
{
};
interface EdgeEndpoint<
ON,
- OE extends Edge<ON,? extends Edge.Endpoint<ON>>
+ OE extends Edge<ON,? extends Edge.Endpoint<? extends ON>>
> extends Graph.Endpoint<ON,OE,OE>
{
};
diff --git a/src/main/java/com/syncleus/dann/graph/MutableAdjacencyGraph.java b/src/main/java/com/syncleus/dann/graph/MutableAdjacencyGraph.java
index 57cbc5943478f143802618c39a84aed66b772e13..b512b28260e9c198e61d126aca13ca25df91657f 100644
--- a/src/main/java/com/syncleus/dann/graph/MutableAdjacencyGraph.java
+++ b/src/main/java/com/syncleus/dann/graph/MutableAdjacencyGraph.java
@@ -21,24 +21,27 @@ package com.syncleus.dann.graph;
import java.util.*;
public final class MutableAdjacencyGraph<
+ N,
+ E extends Edge<N,Edge.Endpoint<N>>
+ > extends AbstractMutableAdjacencyGraph<N,E,MutableGraph.NodeEndpoint<N, E>,MutableGraph.EdgeEndpoint<N, E>>
+/*
+ <
N,
E extends Edge<N,? extends Edge.Endpoint<N>>
- >
- extends AbstractMutableAdjacencyGraph<N, E, MutableGraph.NodeEndpoint<N, E>, MutableGraph.EdgeEndpoint<N, E>>
- implements MutableGraph<N, E, MutableGraph.NodeEndpoint<N, E>, MutableGraph.EdgeEndpoint<N, E>>
+ >*/
+// extends AbstractMutableAdjacencyGraph<N, E, MutableGraph.NodeEndpoint<N, E>//, MutableGraph.EdgeEndpoint<N, E>>
{
private static final long serialVersionUID = -4613327727609060678L;
@Override
public boolean isContextEnabled()
{
- return false; //To change body of implemented methods use File | Settings | File Templates.
+ return false;
}
@Override
protected MutableGraph.NodeEndpoint<N, E> createNodeEndpoint(N node) throws InvalidGraphException
{
- return null; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
@@ -46,4 +49,12 @@ public final class MutableAdjacencyGraph<
{
return null; //To change body of implemented methods use File | Settings | File Templates.
}
+
+ private final class NodeEndpoint extends AbstractNodeEndpoint
+ {
+ }
+
+ private final class EdgeEndpoint extends AbstractEdgeEndpoint
+ {
+ }
}
diff --git a/src/main/java/com/syncleus/dann/graph/MutableGraph.java b/src/main/java/com/syncleus/dann/graph/MutableGraph.java
index a6ae780780fb646e255f3c9bedcb9c602765e77e..5ce6d450b76635dbadfd869faad235f2f861249b 100644
--- a/src/main/java/com/syncleus/dann/graph/MutableGraph.java
+++ b/src/main/java/com/syncleus/dann/graph/MutableGraph.java
@@ -23,21 +23,21 @@ import java.util.Set;
public interface MutableGraph<
N,
- E extends Edge<N,? extends Edge.Endpoint<N>>,
+ E extends Edge<N,? extends Edge.Endpoint<? extends N>>,
NEP extends MutableGraph.NodeEndpoint<N, E>,
EEP extends MutableGraph.EdgeEndpoint<N, E>
> extends AssignableGraph<N,E,NEP,EEP>
{
interface NodeEndpoint<
ON,
- OE extends Edge<ON,? extends Edge.Endpoint<ON>>
+ OE extends Edge<ON,? extends Edge.Endpoint<? extends ON>>
> extends AssignableGraph.NodeEndpoint<ON,OE>
{
};
interface EdgeEndpoint<
ON,
- OE extends Edge<ON,? extends Edge.Endpoint<ON>>
+ OE extends Edge<ON,? extends Edge.Endpoint<? extends ON>>
> extends AssignableGraph.EdgeEndpoint<ON,OE>
{
};