org.graphstream.graph.Structure Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gs-core Show documentation
Show all versions of gs-core Show documentation
The GraphStream library. With GraphStream you deal with
graphs. Static and Dynamic. You create them from scratch, from a file
or any source. You display and render them. This is the core package
that contains the minimal needed to read and write a graph.
/*
* Copyright 2006 - 2015
* Stefan Balev
* Julien Baudry
* Antoine Dutot
* Yoann Pigné
* Guilhelm Savin
*
* This file is part of GraphStream .
*
* GraphStream is a library whose purpose is to handle static or dynamic
* graph, create them from scratch, file or any source and display them.
*
* This program is free software distributed under the terms of two licenses, the
* CeCILL-C license that fits European law, and the GNU Lesser General Public
* License. You can use, modify and/ or redistribute the software under the terms
* of the CeCILL-C license as circulated by CEA, CNRS and INRIA at the following
* URL or under the terms of the GNU LGPL as published by
* the Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*
* The fact that you are presently reading this means that you have had
* knowledge of the CeCILL-C and LGPL licenses and that you accept their terms.
*/
package org.graphstream.graph;
import java.util.Collection;
import java.util.Iterator;
/**
* Structures are generic objects which may contain nodes and edges.
*
*/
public interface Structure {
/**
* Number of nodes in this graph.
*
* @return The number of nodes.
*/
int getNodeCount();
/**
* Number of edges in this graph.
*
* @return The number of edges.
*/
int getEdgeCount();
/**
* Iterator on the set of nodes, in an undefined order. This method is
* implicitly generic and returns an Iterator over something which extends
* Node. The return type is the one of the left part of the assignment. For
* example, in the following call :
*
*
* Iterator<ExtendedNode> ite = graph.getNodeIterator();
*
*
* the method will return an Iterator<ExtendedNode>. If no left part
* exists, method will just return an Iterator<Node>.
*
* @return The iterator.
*/
Iterator getNodeIterator();
/**
* Iterator on the set of edges, in an undefined order. This method is
* implicitly generic and returns an Iterator over something which extends
* Edge. The return type is the one of the left part of the assignment. For
* example, in the following call :
*
*
* Iterator<ExtendedEdge> ite = graph.getEdgeIterator();
*
*
* the method will return an Iterator<ExtendedEdge>. If no left part
* exists, method will just return an Iterator<Edge>.
*
* @return The iterator.
*/
Iterator getEdgeIterator();
/**
* Set of nodes usable in a for-each instruction. This method is implicitly
* generic and returns an Iterable over something which extends Node. The
* return type is the one of the left part of the assignment. For example,
* in the following call :
*
*
* Iterable<ExtendedNode> ite = struct.getEachNode();
*
*
* the method will return an Iterable<ExtendedNode>. If no left part
* exists, method will just return an Iterable<Node>. It is possible
* to use it in a for-each loop by giving the parameter :
*
*
* for (ExtendedNode n : struct.<ExtendedNode> getEachNode()) {
* // ...
* }
*
*
* @return An "iterable" view of the set of nodes.
* @see #getNodeIterator()
* @see #getEachNode()
*/
Iterable extends T> getEachNode();
/**
* Set of edges usable in a for-each instruction. This method is implicitly
* generic and returns an Iterable over something which extends Edge. The
* return type is the one of the left part of the assignment. For example,
* in the following call :
*
*
* Iterable<ExtendedNEdge> ite = struct.getEachEdge();
*
*
* the method will return an Iterable<ExtendedEdge>. If no left part
* exists, method will just return an Iterable<Edge>. It is possible
* to use it in a for-each loop by giving the parameter :
*
*
* for (ExtendedEdge e : struct.<ExtendedEdge> getEachEdge()) {
* // ...
* }
*
*
* @return An "iterable" view of the set of edges.
* @see #getEdgeIterator()
* @see #getEdgeSet()
*/
Iterable extends T> getEachEdge();
/**
* Unmodifiable view of the set of nodes. This method is implicitly generic
* and returns a Collection of something which extends Node. The return type
* is the one of the left part of the assignment. For example, in the
* following call :
*
*
* Collection<ExtendedNode> c = struct.getNodeSet();
*
*
* the method will return a Collection<ExtendedNode>. If no left part
* exists, method will just return a Collection<Node>.
*
* @return A set of nodes that can only be read, not changed.
* @see #getNodeIterator()
* @see #getEachNode()
*/
Collection getNodeSet();
/**
* Unmodifiable view of the set of edges. This method is implicitly generic
* and returns a Collection of something which extends Edge. The return type
* is the one of the left part of the assignment. For example, in the
* following call :
*
*
* Collection<ExtendedEdge> c = struct.getEdgeSet();
*
*
* the method will return a Collection<ExtendedEdge>. If no left part
* exists, method will just return a Collection<Edge>.
*
* @return A set of edges that can only be read, not changed.
* @see #getEdgeIterator()
* @see #getEachEdge()
*/
Collection getEdgeSet();
}