📄 triangularmatrixparser.java
字号:
/* * Copyright (c) 2003-2005 The BISON Project * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 2 as * published by the Free Software Foundation. * * 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, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */package peersim.transport;import java.io.*;import peersim.config.*;import peersim.core.*;/** * Initializes static singleton {@link E2ENetwork} by reading a trace * file containing the latency distance measured between a set of * "virtual" routers. Latency is assumed to be symmetric, so the * latency between x and y is equal to the latency to y and x. * * The format of the file is as follows: all values are stored as * integers. The first value is the number of nodes considered. * The rest of the values correspond to a "strictly upper triangular * matrix" (see this * <a href="http://en.wikipedia.org/w/index.php?title=Triangular_matrix&oldid=82411128"> * link</a>), ordered first by row than by column. * * @author Alberto Montresor * @version $Revision: 1.4 $ */public class TriangularMatrixParser implements Control{// ---------------------------------------------------------------------// Parameters// ---------------------------------------------------------------------/** * This configuration parameter identifies the filename of the file * containing the measurements. First, the file is used as a pathname * in the local file system. If no file can be identified in this way, * the file is searched in the local classpath. If the file cannot be * identified again, an error message is reported. * @config */private static final String PAR_FILE = "file";/** * The ratio between the time units used in the configuration file and the * time units used in the Peersim simulator. * @config */private static final String PAR_RATIO = "ratio";// ---------------------------------------------------------------------// Fields// ---------------------------------------------------------------------/** Name of the file containing the measurements. */private String filename;/** Ratio read from PAR_RATIO */private double ratio;// ---------------------------------------------------------------------// Initialization// ---------------------------------------------------------------------/** * Read the configuration parameters. */public TriangularMatrixParser(String prefix){ filename = Configuration.getString(prefix + "." + PAR_FILE); ratio = Configuration.getDouble(prefix + "." + PAR_RATIO);}// ---------------------------------------------------------------------// Methods// ---------------------------------------------------------------------/** * Initializes static singleton {@link E2ENetwork} by reading a king data set.* @return always false*/public boolean execute(){ try { ObjectInputStream in = null; try { in = new ObjectInputStream( new BufferedInputStream( new FileInputStream(filename))); System.err.println("TriangularMatrixParser: Reading " + filename + " from local file system"); } catch (FileNotFoundException e) { in = new ObjectInputStream( new BufferedInputStream( ClassLoader.getSystemResourceAsStream(filename))); System.err.println("TriangularMatrixParser: Reading " + filename + " through the class loader"); } // Read the number of nodes in the file (first four bytes). int size = in.readInt(); // Reset the E2E network E2ENetwork.reset(size, true); System.err.println("TriangularMatrixParser: reading " + size + " rows"); // If the file format is not correct, data will be read // incorrectly. Probably a good way to spot this is the // presence of negative delays, or an end of file. // Reading data int count = 0; for (int r=0; r < size; r++) { for (int c = r+1; c < size; c++) { int x = (int) (ratio*in.readInt()); count++; E2ENetwork.setLatency(r,c,x); } } System.err.println("TriangularMatrixParser: Read " + count + " entries"); } catch (IOException e) { throw new RuntimeException(e.getMessage()); } return false;}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -