Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/internal/tmf/core/trace/experiment/TmfLocationArray.java')
-rw-r--r--tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/internal/tmf/core/trace/experiment/TmfLocationArray.java204
1 files changed, 204 insertions, 0 deletions
diff --git a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/internal/tmf/core/trace/experiment/TmfLocationArray.java b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/internal/tmf/core/trace/experiment/TmfLocationArray.java
new file mode 100644
index 0000000000..fa5428e6be
--- /dev/null
+++ b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/internal/tmf/core/trace/experiment/TmfLocationArray.java
@@ -0,0 +1,204 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 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:
+ * Patrick Tasse - Initial API and implementation
+ * Francois Chouinard - Put in shape for 1.0
+ * Patrick Tasse - Updated for ranks in experiment location
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.internal.tmf.core.trace.experiment;
+
+import java.util.Arrays;
+
+import org.eclipse.tracecompass.tmf.core.trace.location.ITmfLocation;
+
+
+/**
+ * A convenience class to store trace location arrays. The main purpose is to
+ * provide an immutable and Comparable implementation for TmfExperimentLocation.
+ *
+ * @version 1.0
+ * @author Patrick Tasse
+ */
+public final class TmfLocationArray implements Comparable<TmfLocationArray> {
+
+ // ------------------------------------------------------------------------
+ // Attributes
+ // ------------------------------------------------------------------------
+
+ private final ITmfLocation[] fLocations;
+ private final long [] fRanks;
+
+ // ------------------------------------------------------------------------
+ // Constructors
+ // ------------------------------------------------------------------------
+
+ /**
+ * The standard constructor.
+ *
+ * @param locations the locations
+ * @param ranks the ranks
+ */
+ public TmfLocationArray(ITmfLocation[] locations, long[] ranks) {
+ fLocations = Arrays.copyOf(locations, locations.length);
+ fRanks = Arrays.copyOf(ranks, ranks.length);
+ }
+
+ /**
+ * The update constructor. Copies the arrays and updates a single entry.
+ *
+ * @param locationArray the location array
+ * @param index the updated index
+ * @param location the updated location
+ * @param rank the updated rank
+ */
+ public TmfLocationArray(TmfLocationArray locationArray, int index, ITmfLocation location, long rank) {
+ fLocations = Arrays.copyOf(locationArray.fLocations, locationArray.fLocations.length);
+ fLocations[index] = location;
+ fRanks = Arrays.copyOf(locationArray.fRanks, locationArray.fRanks.length);
+ fRanks[index] = rank;
+ }
+
+ /**
+ * The empty constructor.
+ *
+ * @param size the number of elements in the array
+ */
+ public TmfLocationArray(int size) {
+ fLocations = new ITmfLocation[size];
+ fRanks = new long[size];
+ }
+
+ // ------------------------------------------------------------------------
+ // Getters
+ // ------------------------------------------------------------------------
+
+ /**
+ * Returns the number of elements in this array.
+ *
+ * @return the number of elements in this array
+ */
+ public int size() {
+ return fLocations.length;
+ }
+
+ /**
+ * Get the locations inside this array.
+ *
+ * @return a copy of the locations array
+ */
+ public ITmfLocation[] getLocations() {
+ return Arrays.copyOf(fLocations, fLocations.length);
+ }
+
+ /**
+ * Get a specific location
+ *
+ * @param index the location element
+ *
+ * @return the specific location (possibly null)
+ */
+ public ITmfLocation getLocation(int index) {
+ if (index >= 0 && index < fLocations.length) {
+ return fLocations[index];
+ }
+ return null;
+ }
+
+ /**
+ * Get the ranks inside this array.
+ *
+ * @return a copy of the ranks array
+ */
+ public long[] getRanks() {
+ return Arrays.copyOf(fRanks, fRanks.length);
+ }
+
+ /**
+ * Get a specific rank
+ *
+ * @param index the rank element
+ *
+ * @return the specific rank
+ */
+ public long getRank(int index) {
+ if (index >= 0 && index < fRanks.length) {
+ return fRanks[index];
+ }
+ return 0;
+ }
+
+ // ------------------------------------------------------------------------
+ // Comparable
+ // ------------------------------------------------------------------------
+
+ @Override
+ public int compareTo(TmfLocationArray o) {
+ for (int i = 0; i < fRanks.length; i++) {
+ long rank1 = fRanks[i];
+ long rank2 = o.fRanks[i];
+ if (rank1 < rank2) {
+ return -1;
+ } else if (rank1 > rank2) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ // ------------------------------------------------------------------------
+ // Object
+ // ------------------------------------------------------------------------
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + Arrays.hashCode(fLocations);
+ result = prime * result + Arrays.hashCode(fRanks);
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ TmfLocationArray other = (TmfLocationArray) obj;
+ if (!Arrays.equals(fLocations, other.fLocations)) {
+ return false;
+ }
+ if (!Arrays.equals(fRanks, other.fRanks)) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ @SuppressWarnings("nls")
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append(getClass().getSimpleName() + " [");
+ for (int i = 0; i < fLocations.length; i++) {
+ if (i > 0) {
+ sb.append(", ");
+ }
+ sb.append("[location=" + fLocations[i] + ",rank=" + fRanks[i] + "]");
+ }
+ sb.append("]");
+ return sb.toString();
+ }
+
+}

Back to the top