blob: 34408a35aed0eaebfc8169796b2db903cbb4c9dc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 École Polytechnique de Montréal
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
package org.eclipse.tracecompass.segmentstore.core.segment.interfaces;
import java.util.Comparator;
import java.util.Objects;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.segmentstore.core.ISegment;
/**
* Segments comparators for specific segment interfaces
*
* @author Geneviève Bastien
* @noimplement This interface only contains static definitions.
* @since 2.0
*/
public interface SegmentTypeComparators {
/**
* Compare named segments. If segments that are not named are mixed with
* named segments, their order will be undefined by they will be greater
* than all the named ones.
*/
Comparator<ISegment> NAMED_SEGMENT_COMPARATOR = (@Nullable ISegment o1, @Nullable ISegment o2) -> {
if (o1 == null || o2 == null) {
throw new IllegalArgumentException("One of the segment to compare is null, that should never happen"); //$NON-NLS-1$
}
String name1 = SegmentAspects.getName(o1);
String name2 = SegmentAspects.getName(o2);
if (Objects.equals(name1, name2)) {
return 0;
}
// Segments that are not named are greater than named ones
if (name2 == null) {
return -1;
}
if (name1 == null) {
return 1;
}
return name1.compareTo(name2);
};
}