/*******************************************************************************
* Copyright (c) 2012, 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: Matthew Khouzam - Initial API and implementation
*******************************************************************************/
package org.eclipse.tracecompass.tmf.ctf.core.context;
import java.nio.ByteBuffer;
/**
* The data object to go in a {@link CtfLocation}.
*
* @author Matthew Khouzam
*/
public class CtfLocationInfo implements Comparable<CtfLocationInfo> {
private final long fTimestamp;
private final long fIndex;
/**
* @param ts
* Timestamp
* @param index
* Index of this event (if there are N elements with the same
* timestamp, which one is it.)
*/
public CtfLocationInfo(long ts, long index) {
fTimestamp = ts;
fIndex = index;
}
/**
* Construct the location from the ByteBuffer.
*
* @param bufferIn
* the buffer to read from
*/
public CtfLocationInfo(ByteBuffer bufferIn) {
fTimestamp = bufferIn.getLong();
fIndex = bufferIn.getLong();
}
/**
* @return The timestamp
*/
public long getTimestamp() {
return fTimestamp;
}
/**
* @return The index of the element
*/
public long getIndex() {
return fIndex;
}
// ------------------------------------------------------------------------
// Object
// ------------------------------------------------------------------------
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = (prime * result) + (int) (fIndex ^ (fIndex >>> 32));
result = (prime * result) + (int) (fTimestamp ^ (fTimestamp >>> 32));
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof CtfLocationInfo)) {
return false;
}
CtfLocationInfo other = (CtfLocationInfo) obj;
if (fIndex != other.fIndex) {
return false;
}
if (fTimestamp != other.fTimestamp) {
return false;
}
return true;
}
@Override
public String toString() {
return "Element [" + fTimestamp + '/' + fIndex + ']'; //$NON-NLS-1$
}
// ------------------------------------------------------------------------
// Comparable
// ------------------------------------------------------------------------
@Override
public int compareTo(CtfLocationInfo other) {
if (fTimestamp > other.getTimestamp()) {
return 1;
}
if (fTimestamp < other.getTimestamp()) {
return -1;
}
if (fIndex > other.getIndex()) {
return 1;
}
if (fIndex < other.getIndex()) {
return -1;
}
return 0;
}
/**
* Write the location to the ByteBuffer so that it can be saved to disk.
*
* @param bufferOut
* the buffer to write to
*/
public void serialize(ByteBuffer bufferOut) {
bufferOut.putLong(fTimestamp);
bufferOut.putLong(fIndex);
}
}