G
- Graph
oder OverlayGraph
public abstract class AbstractRouter<G extends AbstractGraph>
extends java.lang.Object
newRouter(Class, AbstractGraph, Log)
erzeugt werden. Wird der new
-Operator bevorzugt, so ist
dies ebenfalls moeglich. Abgeleitete Klassen muessen zwingend den
AbstractRouter(AbstractGraph, Log)
-Konstruktor mittels
super
rufen, um den Graph
und das Log
zu initialisieren.newRouter(Class, AbstractGraph, Log)
,
graphClassOf(Class)
,
findPath(int, int, double, RouterParameters)
,
VertexRouter
,
OverlayVertexRouter
Constructor and Description |
---|
AbstractRouter(G graph,
Log log) |
Modifier and Type | Method and Description |
---|---|
int[] |
findFastestPath(int sourceId,
int targetId)
Komfort-Version, die
findPath(int, int, boolean, boolean) aufruft. |
int[] |
findPath(int sourceId,
int targetId,
boolean shortestPath,
boolean aStar)
Komfort-Version, die
findPath(int, int, double, RouterParameters) mit konkreten
Parametern ruft und sonst alles auf Standard belaesst. |
int[] |
findPath(int sourceId,
int targetId,
double maxCost,
RouterParameters params)
Traversiert den Graphen, bricht ab, sobald
der Ziel-Vertex besucht wurde und liefert den Pfad.
|
int[] |
findShortestPath(int sourceId,
int targetId)
Komfort-Version, die
findPath(int, int, boolean, boolean) aufruft. |
static <G extends AbstractGraph> |
graphClassOf(java.lang.Class<? extends AbstractRouter<?>> routerClass)
Holt die verwendete Graphen-Klasse aus dem
extends <T>
der abgeleiteten Router-Klasse. |
protected void |
init()
Wird als letzte Anweisung im Konstruktor
AbstractRouter(AbstractGraph, Log) aufgerufen. |
abstract boolean |
isVisited(int vertexId)
Liefert true, wenn sich ein Vertex nach der Traversierung
in der BlackList (ClosedList) befindet, also besucht
oder erreicht wurde.
|
abstract int[] |
makePath(int targetId)
Erstellt den Pfad nach erfolgreichem
traverse(int, RouterConstraints, RouterParameters) . |
static <G extends AbstractGraph,R extends AbstractRouter<?>> |
newAbstractRouter(java.lang.Class<R> routerClass,
G graph,
Log log)
Analog
newRouter(Class, AbstractGraph, Log) , allerdings wird hier
die generische Type-Safety zwischen AbstractRouter und
AbstractGraph erst zur Laufzeit ueberprueft. |
static <G extends AbstractGraph,R extends AbstractRouter<G>> |
newRouter(java.lang.Class<R> routerClass,
G graph,
Log log)
Erzeugt eine neue Router-Instanz aus einer Router-Klasse.
|
abstract boolean |
traverse(int sourceId,
RouterConstraints constraints,
RouterParameters params)
Traversiert den Graphen bis zur Abbruchbedingung oder komplett.
|
void |
traverseFully(int sourceId,
RouterParameters params)
Traversiert den kompletten Graphen vom uebergebenen Vertex aus.
|
protected final G extends AbstractGraph graph
protected final Log log
protected void init()
AbstractRouter(AbstractGraph, Log)
aufgerufen.router = new VertexRouter(graph, log) { // 1) // Hier gewinntInteressanterweise ist dies nicht bei normalen (nicht anonymen) Konstrukten der Fall.foo = 99
, da die Initialisierung // erst nach dem Konstruktor und somit auch nachinit()
// ausgeloest wird. private int foo = 99; @Override protected init() {this.foo = 33;} // 2) // Bleibt die Member-Variablefoo
uninitialisiert, // so gewinnt wie erwartet die 33 ausinit()
. private int foo; @Override protected init() {this.foo = 33;} }
init()
gewinnen. Bug in Java?.public static <G extends AbstractGraph,R extends AbstractRouter<G>> R newRouter(java.lang.Class<R> routerClass, G graph, Log log)
G
- GraphenklasseR
- RouterklasserouterClass
- Class of Routergraph
- <G> AbstractGraph
log
- Log
NOT NULLAbstractRouter
newAbstractRouter(Class, AbstractGraph, Log)
public static <G extends AbstractGraph,R extends AbstractRouter<?>> R newAbstractRouter(java.lang.Class<R> routerClass, G graph, Log log)
newRouter(Class, AbstractGraph, Log)
, allerdings wird hier
die generische Type-Safety zwischen AbstractRouter
und
AbstractGraph
erst zur Laufzeit ueberprueft.G
- GraphenklasseR
- RouterklasserouterClass
- AbstractRouter
-Klassegraph
- AbstractGraph
log
- Log
AbstractGraph
-Instanzpublic static <G extends AbstractGraph> java.lang.Class<G> graphClassOf(java.lang.Class<? extends AbstractRouter<?>> routerClass) throws java.lang.Exception
extends <T>
der abgeleiteten Router-Klasse.G
- Class of AbstractGraph
routerClass
- AbstractRouter
- Implementationjava.lang.Exception
- CrashAbstractRouter
public abstract boolean traverse(int sourceId, RouterConstraints constraints, RouterParameters params)
sourceId
- Vertex Start Id (1-wertig)constraints
- RouterConstraints
Abbruchbedingung (NULLABLE).params
- RouterParameters
weitere Einstellungen (NULLABLE).RouterConstraints.targetIds
erreicht.makePath(int)
,
findPath(int, int, double, RouterParameters)
,
AbstractRouter
public abstract int[] makePath(int targetId)
traverse(int, RouterConstraints, RouterParameters)
.targetId
- Id des ZielVertex. Dies muss nicht zwangslaeufig
der Ziel-Knoten sein. Es kann auch ein beliebiger Vertex aus
isVisited(int)
uebergeben werden, um so weitere Pfade zu finden.
Dies muss jedoch von der jeweiligen Implementation des Routers unterstuetzt werden.null
, wenn nicht gefunden.AbstractRouter
public abstract boolean isVisited(int vertexId)
vertexId
- int Id des Vertex >0.makePath(int)
,
AbstractRouter
public final void traverseFully(int sourceId, RouterParameters params)
sourceId
- int Start-Vertexparams
- optionale Parameter (NULLABLE)public final int[] findPath(int sourceId, int targetId, double maxCost, RouterParameters params)
traverse(int, RouterConstraints, RouterParameters)
gerufen, und wenn true
, dann makePath(int)
zurueckgeliefert.sourceId
- Vertex Start IdtargetId
- Vertex Ziel IdmaxCost
- double 0 bzw Double.MAX_VALUE
, wenn keine Zeit- oder Laengen-Begrenzungparams
- RouterParameters
weitere Einstellungen (NULLABLE).null
, wenn nicht gefunden.AbstractRouter
,
findPath(int, int, boolean, boolean)
public final int[] findPath(int sourceId, int targetId, boolean shortestPath, boolean aStar)
findPath(int, int, double, RouterParameters)
mit konkreten
Parametern ruft und sonst alles auf Standard belaesst.sourceId
- Vertex Start IdtargetId
- Vertex Ziel IdshortestPath
- boolean true: Kuerzesten Pfad statt schnellsten finden.aStar
- boolean true: Setzt RouterParameters.setHeuristicFactor(double)
auf 1.null
, wenn nicht gefunden.AbstractRouter
,
findShortestPath(int, int)
,
findFastestPath(int, int)
public final int[] findShortestPath(int sourceId, int targetId)
findPath(int, int, boolean, boolean)
aufruft.sourceId
- Vertex Start IdtargetId
- Vertex Ziel Idnull
, wenn nicht gefunden.AbstractRouter
,
findFastestPath(int, int)
public final int[] findFastestPath(int sourceId, int targetId)
findPath(int, int, boolean, boolean)
aufruft.sourceId
- Vertex Start IdtargetId
- Vertex Ziel Idnull
, wenn nicht gefunden.AbstractRouter
,
findShortestPath(int, int)