/*******************************************************************************
gocha.org-lib-java Библеотека общего назначения
(с) Камнев Георгий Павлович 2009 GPLv2
Данная программа является свободным программным обеспечением. Вы вправе
распространять ее и/или модифицировать в соответствии с условиями версии 2
либо по вашему выбору с условиями более поздней версии
Стандартной Общественной Лицензии GNU, опубликованной Free Software Foundation.
Мы распространяем данную программу в надежде на то, что она будет вам полезной,
однако НЕ ПРЕДОСТАВЛЯЕМ НА НЕЕ НИКАКИХ ГАРАНТИЙ,
в том числе ГАРАНТИИ ТОВАРНОГО СОСТОЯНИЯ ПРИ ПРОДАЖЕ
и ПРИГОДНОСТИ ДЛЯ ИСПОЛЬЗОВАНИЯ В КОНКРЕТНЫХ ЦЕЛЯХ.
Для получения более подробной информации ознакомьтесь
со Стандартной Общественной Лицензией GNU.
Вместе с данной программой вы должны были получить экземпляр
Стандартной Общественной Лицензии GNU.
Если вы его не получили, сообщите об этом в Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*******************************************************************************/
package org.gocha.collection.graph;
import org.gocha.collection.graph.Path.Direction;
/**
* Путь в графе
* @author gocha
*/
public abstract class AbstractPath<N,E> implements Path<N, E> {
@Override
public Edge<N, E> getLastEdge() {
int size = size();
if( size<1 )return null;
return get(size-1);
}
@Override
public N getLastNode() {
Edge<N,E> e = getLastEdge();
Direction d = getDirection();
if( e==null )return null;
return d==null ? e.getNodeB() : (d.equals(Direction.AB) ? e.getNodeB() : e.getNodeA());
}
protected Path.Direction direction = Path.Direction.AB;
public void setDirection(Path.Direction d){
if (d== null) {
throw new IllegalArgumentException("d==null");
}
this.direction = d;
}
@Override
public Direction getDirection() {
return direction;
}
@Override
public boolean contains(N a, N b) {
if (a== null) {
throw new IllegalArgumentException("a==null");
}
if (b== null) {
throw new IllegalArgumentException("b==null");
}
for( Edge<N,E> e : this ){
if( a.equals(e.getNodeA()) && b.equals(e.getNodeB()) )
return true;
}
return false;
}
}