Augment the TmfCheckpoint API (Bug381411)
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.core / src / org / eclipse / linuxtools / internal / tmf / core / trace / TmfExperimentContext.java
CommitLineData
8c8bf09f 1/*******************************************************************************
0316808c 2 * Copyright (c) 2009, 2010, 2012 Ericsson
ce2388e0 3 *
8c8bf09f
ASL
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
ce2388e0 8 *
8c8bf09f
ASL
9 * Contributors:
10 * Francois Chouinard - Initial API and implementation
0316808c 11 * Francois Chouinard - Put in shape for 1.0
8c8bf09f
ASL
12 *******************************************************************************/
13
9e0640dc 14package org.eclipse.linuxtools.internal.tmf.core.trace;
8c8bf09f 15
72f1e62a 16import org.eclipse.linuxtools.tmf.core.event.ITmfEvent;
34ccf9a9 17import org.eclipse.linuxtools.tmf.core.trace.ITmfContext;
6c13869b 18import org.eclipse.linuxtools.tmf.core.trace.ITmfLocation;
6c13869b 19import org.eclipse.linuxtools.tmf.core.trace.TmfContext;
8c8bf09f
ASL
20
21/**
0316808c 22 * The experiment context in TMF.
8c8bf09f 23 * <p>
cbdacf03
FC
24 * The experiment keeps track of the next event from each of its traces so it
25 * can pick the next one in chronological order.
8f50c396 26 * <p>
ce2388e0
FC
27 * This implies that the "next" event from each trace has already been
28 * read and that we at least know its timestamp. This doesn't imply that a
0316808c
FC
29 * full parse of the event content was performed (read: the legacy LTTng works
30 * like this...).
8f50c396 31 * <p>
cbdacf03
FC
32 * The last trace refers to the trace from which the last event was "consumed"
33 * at the experiment level.
8c8bf09f 34 */
9f584e4c
FC
35public class TmfExperimentContext extends TmfContext {
36
cbdacf03
FC
37 // ------------------------------------------------------------------------
38 // Constants
39 // ------------------------------------------------------------------------
40
0316808c
FC
41 /**
42 * No last trace read indicator
43 */
9e0640dc 44 public static final int NO_TRACE = -1;
cbdacf03
FC
45
46 // ------------------------------------------------------------------------
47 // Attributes
48 // ------------------------------------------------------------------------
49
0316808c 50// private ITmfTrace<?>[] fTraces = new ITmfTrace[0];
cbdacf03 51 private final ITmfContext[] fContexts;
ce2388e0 52 private ITmfEvent[] fEvents;
cbdacf03
FC
53 private int lastTraceRead;
54
55 // ------------------------------------------------------------------------
56 // Constructors
57 // ------------------------------------------------------------------------
58
0316808c 59 public TmfExperimentContext(final ITmfContext[] contexts) {
cbdacf03 60 super();
0316808c 61// fTraces = traces;
cbdacf03 62 fContexts = contexts;
0316808c
FC
63 fEvents = new ITmfEvent[fContexts.length];
64 final ITmfLocation<?>[] locations = new ITmfLocation[fContexts.length];
65 final long[] ranks = new long[fContexts.length];
cbdacf03 66 long rank = 0;
0316808c 67 for (int i = 0; i < fContexts.length; i++)
cbdacf03
FC
68 if (contexts[i] != null) {
69 locations[i] = contexts[i].getLocation();
70 ranks[i] = contexts[i].getRank();
71 rank += contexts[i].getRank();
72 }
73
0316808c 74 setLocation(new TmfExperimentLocation(new TmfLocationArray(locations)));
cbdacf03
FC
75 setRank(rank);
76 lastTraceRead = NO_TRACE;
77 }
78
ce2388e0 79 public TmfExperimentContext(final TmfExperimentContext other) {
0316808c 80 this(other.cloneContexts());
ce2388e0
FC
81 fEvents = other.fEvents;
82 if (other.getLocation() != null)
83 setLocation(other.getLocation().clone());
84 setRank(other.getRank());
85 setLastTrace(other.lastTraceRead);
86 }
87
0316808c
FC
88// public TmfExperimentContext(final ITmfTrace<?>[] traces) {
89// this(traces, new TmfContext[traces.length]);
90// }
cbdacf03 91
ce2388e0
FC
92 private ITmfContext[] cloneContexts() {
93 final ITmfContext[] contexts = new ITmfContext[fContexts.length];
94 for (int i = 0; i < fContexts.length; i++)
95 contexts[i] = fContexts[i].clone();
96 return contexts;
97 }
98
99
100 // public TmfExperimentContext(TmfExperimentContext other) {
101 // this(other.fTraces, other.cloneContexts());
102 // fEvents = other.fEvents;
103 // if (other.getLocation() != null)
104 // setLocation(other.getLocation().clone());
105 // setRank(other.getRank());
106 // setLastTrace(other.lastTraceRead);
107 // }
108
109 // private ITmfContext[] cloneContexts() {
110 // ITmfContext[] contexts = new TmfContext[fContexts.length];
111 // for (int i = 0; i < fContexts.length; i++)
112 // contexts[i] = fContexts[i].clone();
113 // return contexts;
114 // }
cbdacf03
FC
115
116 // ------------------------------------------------------------------------
117 // Accessors
118 // ------------------------------------------------------------------------
119
0316808c
FC
120// public ITmfTrace<?>[] getTraces() {
121// return fTraces;
122// }
cbdacf03
FC
123
124 public ITmfContext[] getContexts() {
125 return fContexts;
126 }
127
128 public ITmfEvent[] getEvents() {
129 return fEvents;
130 }
131
132 public int getLastTrace() {
133 return lastTraceRead;
134 }
135
136 public void setLastTrace(final int newIndex) {
137 lastTraceRead = newIndex;
138 }
139
140 // ------------------------------------------------------------------------
141 // Object
142 // ------------------------------------------------------------------------
550d787e
FC
143
144 @Override
145 public int hashCode() {
cbdacf03 146 int result = 17;
0316808c
FC
147 for (int i = 0; i < fContexts.length; i++) {
148// result = 37 * result + fTraces[i].hashCode();
cbdacf03
FC
149 result = 37 * result + fContexts[i].hashCode();
150 }
151 return result;
550d787e 152 }
cbdacf03 153
550d787e 154 @Override
cbdacf03 155 public boolean equals(final Object other) {
6e85c58d
FC
156 if (this == other)
157 return true;
158 if (!super.equals(other))
159 return false;
cbdacf03
FC
160 if (!(other instanceof TmfExperimentContext))
161 return false;
162 final TmfExperimentContext o = (TmfExperimentContext) other;
163 boolean isEqual = true;
164 int i = 0;
0316808c
FC
165 while (isEqual && (i < fContexts.length)) {
166// isEqual &= fTraces[i].equals(o.fTraces[i]);
cbdacf03
FC
167 isEqual &= fContexts[i].equals(o.fContexts[i]);
168 i++;
169 }
170 return isEqual;
550d787e 171 }
cbdacf03 172
8c8bf09f 173}
This page took 0.097421 seconds and 5 git commands to generate.