001: // Spatial Index Library
002: //
003: // Copyright (C) 2002 Navel Ltd.
004: //
005: // This library is free software; you can redistribute it and/or
006: // modify it under the terms of the GNU Lesser General Public
007: // License as published by the Free Software Foundation; either
008: // version 2.1 of the License, or (at your option) any later version.
009: //
010: // This library is distributed in the hope that it will be useful,
011: // but WITHOUT ANY WARRANTY; without even the implied warranty of
012: // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
013: // Lesser General Public License for more details.
014: //
015: // You should have received a copy of the GNU Lesser General Public
016: // License along with this library; if not, write to the Free Software
017: // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
018: //
019: // Contact information:
020: // Mailing address:
021: // Marios Hadjieleftheriou
022: // University of California, Riverside
023: // Department of Computer Science
024: // Surge Building, Room 310
025: // Riverside, CA 92521
026: //
027: // Email:
028: // marioh@cs.ucr.edu
029: package org.geotools.caching.spatialindex.rtree;
030:
031: import org.geotools.caching.spatialindex.spatialindex.*;
032:
033: import java.util.*;
034:
035: public class Statistics implements IStatistics, Cloneable {
036: protected long m_reads;
037: protected long m_writes;
038: protected long m_splits;
039: protected long m_hits;
040: protected long m_misses;
041: protected long m_nodes;
042: protected long m_adjustments;
043: protected long m_queryResults;
044: protected long m_data;
045: protected int m_treeHeight;
046: protected ArrayList m_nodesInLevel = new ArrayList();
047:
048: public Statistics() {
049: reset();
050: }
051:
052: public Statistics(Statistics s) {
053: m_reads = s.m_reads;
054: m_writes = s.m_writes;
055: m_splits = s.m_splits;
056: m_hits = s.m_hits;
057: m_misses = s.m_misses;
058: m_nodes = s.m_nodes;
059: m_adjustments = s.m_adjustments;
060: m_queryResults = s.m_queryResults;
061: m_data = s.m_data;
062: m_treeHeight = s.m_treeHeight;
063: m_nodesInLevel = (ArrayList) s.m_nodesInLevel.clone();
064: }
065:
066: public long getReads() {
067: return m_reads;
068: }
069:
070: public long getWrites() {
071: return m_writes;
072: }
073:
074: public long getNumberOfNodes() {
075: return m_nodes;
076: }
077:
078: public long getNumberOfData() {
079: return m_data;
080: }
081:
082: public long getSplits() {
083: return m_splits;
084: }
085:
086: public long getHits() {
087: return m_hits;
088: }
089:
090: public long getMisses() {
091: return m_misses;
092: }
093:
094: public long getAdjustments() {
095: return m_adjustments;
096: }
097:
098: public long getQueryResults() {
099: return m_queryResults;
100: }
101:
102: public int getTreeHeight() {
103: return m_treeHeight;
104: }
105:
106: public int getNumberOfNodesInLevel(int l)
107: throws IndexOutOfBoundsException {
108: return ((Integer) m_nodesInLevel.get(l)).intValue();
109: }
110:
111: public void reset() {
112: m_reads = 0;
113: m_writes = 0;
114: m_splits = 0;
115: m_hits = 0;
116: m_misses = 0;
117: m_nodes = 0;
118: m_adjustments = 0;
119: m_queryResults = 0;
120: m_data = 0;
121: m_treeHeight = 0;
122: m_nodesInLevel.clear();
123: }
124:
125: public String toString() {
126: String s = "Reads: " + m_reads + "\n" + "Writes: " + m_writes
127: + "\n" + "Hits: " + m_hits + "\n" + "Misses: "
128: + m_misses + "\n" + "Tree height: " + m_treeHeight
129: + "\n" + "Number of data: " + m_data + "\n"
130: + "Number of nodes: " + m_nodes + "\n";
131:
132: for (int cLevel = 0; cLevel < m_treeHeight; cLevel++) {
133: s += ("Level " + cLevel + " pages: "
134: + ((Integer) m_nodesInLevel.get(cLevel)).intValue() + "\n");
135: }
136:
137: s += ("Splits: " + m_splits + "\n" + "Adjustments: "
138: + m_adjustments + "\n" + "Query results: " + m_queryResults);
139:
140: return s;
141: }
142:
143: public Object clone() {
144: return new Statistics(this);
145: }
146: }
|