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 nodes 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 * an A 045 * an B 046 * an C 047 * dn B 048 * an D 049 * dn C 050 * an E 051 * an F 052 * dn E 053 * </pre> 054 * 055 * the maximal count of nodes appearing simultaneously in the graph is 4. 056 */ 057public class MaxSimultaneousNodeCount extends SinkAdapter { 058 /** 059 * Current count of nodes in the graph. 060 */ 061 protected int count; 062 063 /** 064 * Max count of nodes. 065 */ 066 protected int max; 067 068 public MaxSimultaneousNodeCount() { 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 nodes appearing simultaneously in the graph 084 */ 085 public int getMaxSimultaneousNodeCount() { 086 return max; 087 } 088 089 /* 090 * (non-Javadoc) 091 * 092 * @see org.graphstream.stream.SinkAdapter#nodeAdded(java.lang.String, long, 093 * java.lang.String) 094 */ 095 public void nodeAdded(String sourceId, long timeId, String nodeId) { 096 count++; 097 098 if (count > max) 099 max = count; 100 } 101 102 /* 103 * (non-Javadoc) 104 * 105 * @see org.graphstream.stream.SinkAdapter#nodeRemoved(java.lang.String, 106 * long, java.lang.String) 107 */ 108 public void nodeRemoved(String sourceId, long timeId, String nodeId) { 109 count--; 110 } 111 112 /* 113 * (non-Javadoc) 114 * 115 * @see org.graphstream.stream.SinkAdapter#graphCleared(java.lang.String, 116 * long) 117 */ 118 public void graphCleared(String sourceId, long timeId) { 119 count = 0; 120 } 121}