/******************************************************************************* * Copyright (c) 2013 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 * Patrick Tasse - Modified from TmfSimpleTimestamp to use nanosecond scale *******************************************************************************/ package fr.inria.linuxtools.tmf.core.timestamp; /** * A simplified timestamp where scale is nanoseconds and precision is set to 0. * * @since 2.1 */ public class TmfNanoTimestamp extends TmfTimestamp { // ------------------------------------------------------------------------ // Constructors // ------------------------------------------------------------------------ /** * Default constructor (value = 0) */ public TmfNanoTimestamp() { this(0); } /** * Full constructor * * @param value the timestamp value */ public TmfNanoTimestamp(final long value) { super(value, ITmfTimestamp.NANOSECOND_SCALE, 0); } /** * Copy constructor. * * If the parameter is not a TmfNanoTimestamp, the timestamp will be * scaled to nanoseconds, and the precision will be discarded. * * @param timestamp * The timestamp to copy */ public TmfNanoTimestamp(final ITmfTimestamp timestamp) { super(timestamp.normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue(), ITmfTimestamp.NANOSECOND_SCALE, 0); } // ------------------------------------------------------------------------ // ITmfTimestamp // ------------------------------------------------------------------------ @Override public ITmfTimestamp normalize(final long offset, final int scale) { if (scale == ITmfTimestamp.NANOSECOND_SCALE) { return new TmfNanoTimestamp(getValue() + offset); } return super.normalize(offset, scale); } @Override public int compareTo(final ITmfTimestamp ts, final boolean withinPrecision) { if (ts instanceof TmfNanoTimestamp) { final long delta = getValue() - ts.getValue(); return (delta == 0) ? 0 : (delta > 0) ? 1 : -1; } return super.compareTo(ts, withinPrecision); } @Override public ITmfTimestamp getDelta(final ITmfTimestamp ts) { if (ts instanceof TmfNanoTimestamp) { return new TmfTimestampDelta(getValue() - ts.getValue(), ITmfTimestamp.NANOSECOND_SCALE); } return super.getDelta(ts); } // ------------------------------------------------------------------------ // Object // ------------------------------------------------------------------------ @Override public int hashCode() { return super.hashCode(); } @Override public boolean equals(final Object other) { if (this == other) { return true; } if (other == null) { return false; } if (!(other instanceof TmfNanoTimestamp)) { return super.equals(other); } final TmfNanoTimestamp ts = (TmfNanoTimestamp) other; return compareTo(ts, false) == 0; } }