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.algorithm.measure; 033 034import org.graphstream.stream.SinkAdapter; 035 036/** 037 * A measure to get the maximum count of edges appearing simultaneously in the 038 * dynamic graph. It works as a sink, so it just needs to be added to the source 039 * providing graph informations. 040 * 041 * For example, in the graph : 042 * 043 * <pre> 044 * ae AB A B 045 * ae BC B C 046 * ae CD C D 047 * de BC 048 * ae DE D E 049 * de CD 050 * ae EF E F 051 * ae FG F G 052 * de EF 053 * </pre> 054 * 055 * the maximal count of edges appearing simultaneously in the graph is 4. 056 */ 057public class MaxSimultaneousEdgeCount extends SinkAdapter { 058 /** 059 * Current count of edges in the graph. 060 */ 061 protected int count; 062 063 /** 064 * Max count of edges. 065 */ 066 protected int max; 067 068 public MaxSimultaneousEdgeCount() { 069 count = 0; 070 max = 0; 071 } 072 073 /** 074 * Reset the max value. 075 */ 076 public void reset() { 077 max = 0; 078 } 079 080 /** 081 * Get the max value. 082 * 083 * @return the max count of edges appearing simultaneously in the graph 084 */ 085 public int getMaxSimultaneousEdgeCount() { 086 return max; 087 } 088 089 /* 090 * (non-Javadoc) 091 * 092 * @see org.graphstream.stream.SinkAdapter#edgeAdded(java.lang.String, long, 093 * java.lang.String, java.lang.String, java.lang.String, boolean) 094 */ 095 public void edgeAdded(String sourceId, long timeId, String edgeId, 096 String node1, String node2, boolean directed) { 097 count++; 098 099 if (count > max) 100 max = count; 101 } 102 103 /* 104 * (non-Javadoc) 105 * 106 * @see org.graphstream.stream.SinkAdapter#edgeRemoved(java.lang.String, 107 * long, java.lang.String) 108 */ 109 public void edgeRemoved(String sourceId, long timeId, String edgeId) { 110 count--; 111 } 112 113 /* 114 * (non-Javadoc) 115 * @see org.graphstream.stream.SinkAdapter#graphCleared(java.lang.String, long) 116 */ 117 public void graphCleared(String sourceId, long timeId) { 118 count = 0; 119 } 120}