001/* 002 * Copyright 2006 - 2013 003 * Stefan Balev <stefan.balev@graphstream-project.org> 004 * Julien Baudry <julien.baudry@graphstream-project.org> 005 * Antoine Dutot <antoine.dutot@graphstream-project.org> 006 * Yoann Pigné <yoann.pigne@graphstream-project.org> 007 * Guilhelm Savin <guilhelm.savin@graphstream-project.org> 008 * 009 * This file is part of GraphStream <http://graphstream-project.org>. 010 * 011 * GraphStream is a library whose purpose is to handle static or dynamic 012 * graph, create them from scratch, file or any source and display them. 013 * 014 * This program is free software distributed under the terms of two licenses, the 015 * CeCILL-C license that fits European law, and the GNU Lesser General Public 016 * License. You can use, modify and/ or redistribute the software under the terms 017 * of the CeCILL-C license as circulated by CEA, CNRS and INRIA at the following 018 * URL <http://www.cecill.info> or under the terms of the GNU LGPL as published by 019 * the Free Software Foundation, either version 3 of the License, or (at your 020 * option) any later version. 021 * 022 * This program is distributed in the hope that it will be useful, but WITHOUT ANY 023 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 024 * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. 025 * 026 * You should have received a copy of the GNU Lesser General Public License 027 * along with this program. If not, see <http://www.gnu.org/licenses/>. 028 * 029 * The fact that you are presently reading this means that you have had 030 * knowledge of the CeCILL-C and LGPL licenses and that you accept their terms. 031 */ 032package org.graphstream.graph.implementations; 033 034import org.graphstream.graph.Graph; 035import org.graphstream.graph.NodeFactory; 036 037/** 038 * An implementation of graph that supports only one edge between two nodes. 039 */ 040public class SingleGraph extends AdjacencyListGraph { 041 042 /** 043 * Creates an empty graph. 044 * 045 * @param id 046 * Unique identifier of the graph. 047 * @param strictChecking 048 * If true any non-fatal error throws an exception. 049 * @param autoCreate 050 * If true (and strict checking is false), nodes are 051 * automatically created when referenced when creating a edge, 052 * even if not yet inserted in the graph. 053 * @param initialNodeCapacity 054 * Initial capacity of the node storage data structures. Use this 055 * if you know the approximate maximum number of nodes of the 056 * graph. The graph can grow beyond this limit, but storage 057 * reallocation is expensive operation. 058 * @param initialEdgeCapacity 059 * Initial capacity of the edge storage data structures. Use this 060 * if you know the approximate maximum number of edges of the 061 * graph. The graph can grow beyond this limit, but storage 062 * reallocation is expensive operation. 063 */ 064 public SingleGraph(String id, boolean strictChecking, boolean autoCreate, 065 int initialNodeCapacity, int initialEdgeCapacity) { 066 super(id, strictChecking, autoCreate, initialNodeCapacity, 067 initialEdgeCapacity); 068 // All we need to do is to change the node factory 069 setNodeFactory(new NodeFactory<SingleNode>() { 070 public SingleNode newInstance(String id, Graph graph) { 071 return new SingleNode((AbstractGraph) graph, id); 072 } 073 }); 074 } 075 076 /** 077 * Creates an empty graph with default edge and node capacity. 078 * 079 * @param id 080 * Unique identifier of the graph. 081 * @param strictChecking 082 * If true any non-fatal error throws an exception. 083 * @param autoCreate 084 * If true (and strict checking is false), nodes are 085 * automatically created when referenced when creating a edge, 086 * even if not yet inserted in the graph. 087 */ 088 public SingleGraph(String id, boolean strictChecking, boolean autoCreate) { 089 this(id, strictChecking, autoCreate, DEFAULT_NODE_CAPACITY, 090 DEFAULT_EDGE_CAPACITY); 091 } 092 093 /** 094 * Creates an empty graph with strict checking and without auto-creation. 095 * 096 * @param id 097 * Unique identifier of the graph. 098 */ 099 public SingleGraph(String id) { 100 this(id, true, false); 101 } 102 103}