001    /*
002     *  www.ti.bfh.ch
003     *
004     *  Copyright 2007, Berne University of Applied Sciences, 
005     *  School of Engineering and Information Technology
006     *  and individual contributors as indicated by the @authors tag.
007     *
008     *  This is free software; you can redistribute it and/or modify it under the terms of the 
009     *  GNU Lesser General Public License as published by the Free Software Foundation; 
010     *  either version 3 of the License, or (at your option) any later version.
011     *
012     *  This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
013     *  without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
014     *  See the GNU Lesser General Public License for more details.
015     *
016     *  You should have received a copy of the GNU Lesser General Public License along with this software; 
017     *  if not, see <http://www.gnu.org/licenses/>.
018     *
019     */
020    package ch.bfh.algo.core;
021    
022    import ch.bfh.algo.Direction;
023    import ch.bfh.algo.Graph;
024    import ch.bfh.algo.InvalidAccessorException;
025    import ch.bfh.algo.Position;
026    import ch.bfh.algo.core.position.PositionList;
027    
028    public interface GenericGraph<E,V,PE extends GenericPosition<E,PE>,PV extends GenericPosition<V,PV>> extends GenericContainer<V,PV>, Graph<E,V>{
029    
030            public PE insertEdge(E element);
031            public PE insertEdge(E element, PV origin, PV destination);
032            public PV insertVertex(V element);
033    
034            public PV origin(Position<?> edge) throws InvalidAccessorException;
035            public PV destination(Position<?> edge) throws InvalidAccessorException;
036    
037            public PV opposite(Position<?> edge, Position<?> vertex) throws InvalidAccessorException;
038            
039            public PositionList<V,PV> vertices();
040            public PositionList<E,PE> edges();
041            public PositionList<E,PE> edges(Direction type);
042            public PositionList<E,PE> incidentEdges(Position<?> vertex, Direction type) throws InvalidAccessorException;        
043            public PositionList<V,PV> adjacentVertices(Position<?> vertex, Direction type) throws InvalidAccessorException;
044            
045    }