diff options
Diffstat (limited to 'tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/indexer/checkpoint/TmfCheckpoint.java')
-rw-r--r-- | tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/indexer/checkpoint/TmfCheckpoint.java | 209 |
1 files changed, 209 insertions, 0 deletions
diff --git a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/indexer/checkpoint/TmfCheckpoint.java b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/indexer/checkpoint/TmfCheckpoint.java new file mode 100644 index 0000000000..efe3a552d3 --- /dev/null +++ b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/indexer/checkpoint/TmfCheckpoint.java @@ -0,0 +1,209 @@ +/******************************************************************************* + * Copyright (c) 2009, 2014 Ericsson + * + * All rights reserved. This program and the accompanying materials are + * made available under the terms of the Eclipse Public License v1.0 which + * accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Francois Chouinard - Initial API and implementation + * Francois Chouinard - Updated as per TMF Trace Model 1.0 + * Patrick Tasse - Updated for location in checkpoint + ******************************************************************************/ + +package org.eclipse.tracecompass.tmf.core.trace.indexer.checkpoint; + +import java.nio.ByteBuffer; + +import org.eclipse.tracecompass.tmf.core.timestamp.ITmfTimestamp; +import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp; +import org.eclipse.tracecompass.tmf.core.trace.location.ITmfLocation; + +/** + * A basic implementation of ITmfCheckpoint. It simply maps an event timestamp + * to a generic location. + * + * @see ITmfLocation + * @see ITmfTimestamp + * + * @author Francois Chouinard + */ +public class TmfCheckpoint implements ITmfCheckpoint { + + // ------------------------------------------------------------------------ + // Attributes + // ------------------------------------------------------------------------ + + // The checkpoint location + private final ITmfLocation fLocation; + + // The checkpoint timestamp + private final ITmfTimestamp fTimestamp; + + private final long fCheckpointRank; + + // ------------------------------------------------------------------------ + // Constructors + // ------------------------------------------------------------------------ + + /** + * Full constructor + * + * @param timestamp + * the checkpoint timestamp + * @param location + * the corresponding trace location + * @param checkpointRank + * the rank of the checkpoint + */ + public TmfCheckpoint(final ITmfTimestamp timestamp, final ITmfLocation location, long checkpointRank) { + fTimestamp = timestamp; + fLocation = location; + fCheckpointRank = checkpointRank; + } + + /** + * Constructs a checkpoint using also a byte buffer to read the rank from + * disk. + * + * @param timestamp + * the checkpoint timestamp + * @param location + * the corresponding trace location + * @param bufferIn + * the byte buffer to read from + */ + public TmfCheckpoint(final ITmfTimestamp timestamp, final ITmfLocation location, ByteBuffer bufferIn) { + fTimestamp = timestamp; + fLocation = location; + fCheckpointRank = bufferIn.getLong(); + } + + /** + * Copy constructor + * + * @param other the other checkpoint + */ + public TmfCheckpoint(final TmfCheckpoint other) { + if (other == null) { + throw new IllegalArgumentException(); + } + fTimestamp = other.fTimestamp; + fLocation = other.fLocation; + fCheckpointRank = other.fCheckpointRank; + } + + // ------------------------------------------------------------------------ + // ITmfCheckpoint + // ------------------------------------------------------------------------ + + @Override + public ITmfTimestamp getTimestamp() { + return fTimestamp; + } + + @Override + public ITmfLocation getLocation() { + return fLocation; + } + + // ------------------------------------------------------------------------ + // Comparable + // ------------------------------------------------------------------------ + + @Override + @SuppressWarnings({ "unchecked", "rawtypes" }) + public int compareTo(final ITmfCheckpoint other) { + int comp = 0; + if ((fTimestamp != null) && (other.getTimestamp() != null)) { + comp = fTimestamp.compareTo(other.getTimestamp()); + if (comp != 0) { + return comp; + } + // compare locations if timestamps are the same + } + + if ((fLocation == null) && (other.getLocation() == null)) { + return 0; + } + + // treat location of other as null location which is before any location + if ((fLocation != null) && (other.getLocation() == null)) { + return 1; + } + + // treat this as null location which is before any other locations + if ((fLocation == null) && (other.getLocation() != null)) { + return -1; + } + + // compare location + final Comparable location1 = getLocation().getLocationInfo(); + final Comparable location2 = other.getLocation().getLocationInfo(); + return location1.compareTo(location2); + } + + // ------------------------------------------------------------------------ + // Object + // ------------------------------------------------------------------------ + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((fLocation == null) ? 0 : fLocation.hashCode()); + result = prime * result + ((fTimestamp == null) ? 0 : fTimestamp.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (!(obj instanceof TmfCheckpoint)) { + return false; + } + final TmfCheckpoint other = (TmfCheckpoint) obj; + if (fLocation == null) { + if (other.fLocation != null) { + return false; + } + } else if (!fLocation.equals(other.fLocation)) { + return false; + } + if (fTimestamp == null) { + if (other.fTimestamp != null) { + return false; + } + } else if (!fTimestamp.equals(other.fTimestamp)) { + return false; + } + return true; + } + + @Override + @SuppressWarnings("nls") + public String toString() { + return getClass().getSimpleName() + " [fLocation=" + fLocation + ", fTimestamp=" + fTimestamp + ", fCheckpointRank=" + fCheckpointRank + "]"; + } + + @Override + public void serialize(ByteBuffer bufferOut) { + fLocation.serialize(bufferOut); + // Always serialize as base TmfTimestamp, this should be sufficient for indexing. + // If not, we can add API for the test to restore the time stamp, similarly to the location. + TmfTimestamp t = new TmfTimestamp(fTimestamp); + t.serialize(bufferOut); + bufferOut.putLong(fCheckpointRank); + } + + @Override + public long getCheckpointRank() { + return fCheckpointRank; + } +} |