1 | /* | |
2 | * Copyright 2006 - 2013 | |
3 | * Stefan Balev <stefan.balev@graphstream-project.org> | |
4 | * Julien Baudry <julien.baudry@graphstream-project.org> | |
5 | * Antoine Dutot <antoine.dutot@graphstream-project.org> | |
6 | * Yoann Pign�� <yoann.pigne@graphstream-project.org> | |
7 | * Guilhelm Savin <guilhelm.savin@graphstream-project.org> | |
8 | * | |
9 | * This file is part of GraphStream <http://graphstream-project.org>. | |
10 | * | |
11 | * GraphStream is a library whose purpose is to handle static or dynamic | |
12 | * graph, create them from scratch, file or any source and display them. | |
13 | * | |
14 | * This program is free software distributed under the terms of two licenses, the | |
15 | * CeCILL-C license that fits European law, and the GNU Lesser General Public | |
16 | * License. You can use, modify and/ or redistribute the software under the terms | |
17 | * of the CeCILL-C license as circulated by CEA, CNRS and INRIA at the following | |
18 | * URL <http://www.cecill.info> or under the terms of the GNU LGPL as published by | |
19 | * the Free Software Foundation, either version 3 of the License, or (at your | |
20 | * option) any later version. | |
21 | * | |
22 | * This program is distributed in the hope that it will be useful, but WITHOUT ANY | |
23 | * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A | |
24 | * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. | |
25 | * | |
26 | * You should have received a copy of the GNU Lesser General Public License | |
27 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
28 | * | |
29 | * The fact that you are presently reading this means that you have had | |
30 | * knowledge of the CeCILL-C and LGPL licenses and that you accept their terms. | |
31 | */ | |
32 | package org.graphstream.graph.implementations; | |
33 | ||
34 | import org.graphstream.graph.Graph; | |
35 | import org.graphstream.graph.NodeFactory; | |
36 | ||
37 | /** | |
38 | * A graph implementation that supports multiple edges between two nodes. | |
39 | */ | |
40 | ||
41 | public class MultiGraph extends AdjacencyListGraph { | |
42 | ||
43 | /** | |
44 | * Creates an empty graph. | |
45 | * | |
46 | * @param id | |
47 | * Unique identifier of the graph. | |
48 | * @param strictChecking | |
49 | * If true any non-fatal error throws an exception. | |
50 | * @param autoCreate | |
51 | * If true (and strict checking is false), nodes are | |
52 | * automatically created when referenced when creating a edge, | |
53 | * even if not yet inserted in the graph. | |
54 | * @param initialNodeCapacity | |
55 | * Initial capacity of the node storage data structures. Use this | |
56 | * if you know the approximate maximum number of nodes of the | |
57 | * graph. The graph can grow beyond this limit, but storage | |
58 | * reallocation is expensive operation. | |
59 | * @param initialEdgeCapacity | |
60 | * Initial capacity of the edge storage data structures. Use this | |
61 | * if you know the approximate maximum number of edges of the | |
62 | * graph. The graph can grow beyond this limit, but storage | |
63 | * reallocation is expensive operation. | |
64 | */ | |
65 | public MultiGraph(String id, boolean strictChecking, boolean autoCreate, | |
66 | int initialNodeCapacity, int initialEdgeCapacity) { | |
67 | super(id, strictChecking, autoCreate, initialNodeCapacity, | |
68 | initialEdgeCapacity); | |
69 | // All we need to do is to change the node factory | |
70 |
1
1. |
setNodeFactory(new NodeFactory<MultiNode>() { |
71 | public MultiNode newInstance(String id, Graph graph) { | |
72 |
1
1. newInstance : mutated return of Object value for org/graphstream/graph/implementations/MultiGraph$1::newInstance to ( if (x != null) null else throw new RuntimeException ) → NO_COVERAGE |
return new MultiNode((AbstractGraph) graph, id); |
73 | } | |
74 | }); | |
75 | } | |
76 | ||
77 | /** | |
78 | * Creates an empty graph with default edge and node capacity. | |
79 | * | |
80 | * @param id | |
81 | * Unique identifier of the graph. | |
82 | * @param strictChecking | |
83 | * If true any non-fatal error throws an exception. | |
84 | * @param autoCreate | |
85 | * If true (and strict checking is false), nodes are | |
86 | * automatically created when referenced when creating a edge, | |
87 | * even if not yet inserted in the graph. | |
88 | */ | |
89 | public MultiGraph(String id, boolean strictChecking, boolean autoCreate) { | |
90 | this(id, strictChecking, autoCreate, DEFAULT_NODE_CAPACITY, | |
91 | DEFAULT_EDGE_CAPACITY); | |
92 | } | |
93 | ||
94 | /** | |
95 | * Creates an empty graph with strict checking and without auto-creation. | |
96 | * | |
97 | * @param id | |
98 | * Unique identifier of the graph. | |
99 | */ | |
100 | public MultiGraph(String id) { | |
101 | this(id, true, false); | |
102 | } | |
103 | } | |
Mutations | ||
70 |
1.1 |
|
72 |
1.1 |