/******************************************************************************* * Copyright (c) 2013, 2015 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: * Alexandre Montplaisir - Initial API and implementation *******************************************************************************/ package org.eclipse.tracecompass.tmf.ctf.core.event; import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.eclipse.tracecompass.ctf.core.event.IEventDeclaration; import org.eclipse.tracecompass.ctf.core.event.IEventDefinition; import org.eclipse.tracecompass.tmf.core.event.ITmfLostEvent; import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimeRange; import org.eclipse.tracecompass.tmf.ctf.core.trace.CtfTmfTrace; import com.google.common.primitives.Longs; /** * An implementation of {@link ITmfLostEvent} for use in the CTF adaptor. * * @author Alexandre Montplaisir */ @NonNullByDefault public class CtfTmfLostEvent extends CtfTmfEvent implements ITmfLostEvent { private final TmfTimeRange fTimeRange; private final long fNbLost; /** * Constructor. Only {@link CtfTmfEventFactory} should call this. * * @param trace * The origin trace * @param rank * The rank of the event in the trace * @param content * The event's payload (fields). In case this event has some. * @param fileName * The name of the trace file from which this event comes * @param cpu * The CPU on which this event happened * @param declaration * The CTF Event Declaration object that created this event * @param timeRange * The time range of lost events indicated by this one * @param nbLost * The number of lost events in the range */ CtfTmfLostEvent(CtfTmfTrace trace, long rank, String fileName, int cpu, IEventDeclaration declaration, TmfTimeRange timeRange, long nbLost, IEventDefinition def) { /* * Only the factory should call this method, the cast to * (TmfNanoTimestamp) should be safe. */ super(trace, rank, timeRange.getStartTime(), fileName, cpu, declaration, def); fTimeRange = timeRange; fNbLost = nbLost; } @Override public TmfTimeRange getTimeRange() { return fTimeRange; } @Override public long getNbLostEvents() { return fNbLost; } // ------------------------------------------------------------------------ // Object // ------------------------------------------------------------------------ @Override public int hashCode() { final int prime = 31; int result = super.hashCode(); result = prime * result + getTimeRange().hashCode(); result = prime * result + Longs.hashCode(getNbLostEvents()); return result; } @Override public boolean equals(@Nullable Object obj) { if (!super.equals(obj)) { return false; } /* super.equals() checks that the classes are the same */ CtfTmfLostEvent other = checkNotNull((CtfTmfLostEvent) obj); if (!getTimeRange().equals(other.getTimeRange())) { return false; } if (getNbLostEvents() != other.getNbLostEvents()) { return false; } return true; } }