rcp: Move plugins to their own sub-directory
[deliverable/tracecompass.git] / org.eclipse.tracecompass.tmf.ctf.core / src / org / eclipse / tracecompass / tmf / ctf / core / context / CtfTmfContext.java
1 /*******************************************************************************
2 * Copyright (c) 2012, 2014 Ericsson
3 *
4 * All rights reserved. This program and the accompanying materials are made
5 * 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
8 *
9 * Contributors:
10 * Matthew Khouzam - Initial API and implementation
11 * Simon Delisle - Remove the iterator in dispose()
12 *******************************************************************************/
13
14 package org.eclipse.tracecompass.tmf.ctf.core.context;
15
16 import org.eclipse.tracecompass.internal.tmf.ctf.core.trace.iterator.CtfIterator;
17 import org.eclipse.tracecompass.tmf.core.trace.ITmfContext;
18 import org.eclipse.tracecompass.tmf.core.trace.location.ITmfLocation;
19 import org.eclipse.tracecompass.tmf.ctf.core.event.CtfTmfEvent;
20 import org.eclipse.tracecompass.tmf.ctf.core.trace.CtfTmfTrace;
21
22 /**
23 * Lightweight Context for CtfTmf traces. Should only use 3 references, 1 ref to
24 * a boxed Long, a long and an int.
25 *
26 * @author Matthew Khouzam
27 */
28 public class CtfTmfContext implements ITmfContext {
29
30 // -------------------------------------------
31 // Fields
32 // -------------------------------------------
33
34 private CtfLocation fCurLocation;
35 private long fCurRank;
36
37 private final CtfTmfTrace fTrace;
38
39 // -------------------------------------------
40 // Constructor
41 // -------------------------------------------
42
43 /**
44 * Constructor
45 *
46 * @param ctfTmfTrace
47 * the parent trace
48 */
49 public CtfTmfContext(CtfTmfTrace ctfTmfTrace) {
50 fTrace = ctfTmfTrace;
51 fCurLocation = new CtfLocation(new CtfLocationInfo(0, 0));
52 }
53
54 // -------------------------------------------
55 // TmfContext Overrides
56 // -------------------------------------------
57
58 @Override
59 public long getRank() {
60 return fCurRank;
61 }
62
63 @Override
64 public synchronized ITmfLocation getLocation() {
65 return fCurLocation;
66 }
67
68 @Override
69 public boolean hasValidRank() {
70 return fCurRank != CtfLocation.INVALID_LOCATION.getTimestamp();
71 }
72
73 @Override
74 public synchronized void setLocation(ITmfLocation location) {
75 if (location instanceof CtfLocation) {
76 CtfIterator iterator = getIterator();
77 iterator.seek(((CtfLocation) location).getLocationInfo());
78 fCurLocation = iterator.getLocation();
79 } else {
80 fCurLocation = null;
81 }
82 }
83
84 @Override
85 public void setRank(long rank) {
86 fCurRank = rank;
87
88 }
89
90 @Override
91 public void increaseRank() {
92 if (hasValidRank()) {
93 fCurRank++;
94 }
95 }
96
97 // -------------------------------------------
98 // CtfTmfTrace Helpers
99 // -------------------------------------------
100
101 /**
102 * Gets the trace of this context.
103 *
104 * @return The trace of this context
105 */
106 public CtfTmfTrace getTrace() {
107 return fTrace;
108 }
109
110 /**
111 * Gets the current event. Wrapper to help CtfTmfTrace
112 *
113 * @return The event or null
114 */
115 public synchronized CtfTmfEvent getCurrentEvent() {
116 return getIterator().getCurrentEvent();
117 }
118
119 /**
120 * Advances to a the next event. Wrapper to help CtfTmfTrace
121 *
122 * @return success or not
123 */
124 public synchronized boolean advance() {
125 final CtfLocationInfo curLocationData = fCurLocation.getLocationInfo();
126 CtfIterator iterator = getIterator();
127 boolean retVal = iterator.advance();
128 CtfTmfEvent currentEvent = iterator.getCurrentEvent();
129
130 if (currentEvent != null) {
131 final long timestampValue = iterator.getCurrentTimestamp();
132 if (curLocationData.getTimestamp() == timestampValue) {
133 fCurLocation = new CtfLocation(timestampValue, curLocationData.getIndex() + 1);
134 } else {
135 fCurLocation = new CtfLocation(timestampValue, 0L);
136 }
137 } else {
138 fCurLocation = new CtfLocation(CtfLocation.INVALID_LOCATION);
139 }
140
141 return retVal;
142 }
143
144 @Override
145 public void dispose() {
146 fTrace.disposeContext(this);
147 }
148
149 /**
150 * Seeks to a given timestamp. Wrapper to help CtfTmfTrace
151 *
152 * @param timestamp
153 * desired timestamp
154 * @return success or not
155 */
156 public synchronized boolean seek(final long timestamp) {
157 CtfIterator iterator = getIterator();
158 boolean ret = iterator.seek(timestamp);
159 fCurLocation = iterator.getLocation();
160 return ret;
161 }
162
163 /**
164 * Seeks to a given location. Wrapper to help CtfTmfTrace
165 * @param location
166 * unique location to find the event.
167 *
168 * @return success or not
169 */
170 public synchronized boolean seek(final CtfLocationInfo location) {
171 fCurLocation = new CtfLocation(location);
172 return getIterator().seek(location);
173 }
174
175 // -------------------------------------------
176 // Private helpers
177 // -------------------------------------------
178
179 /**
180 * Get iterator, called every time to get an iterator, no local copy is
181 * stored so that there is no need to "update"
182 *
183 * @return an iterator
184 */
185 private CtfIterator getIterator() {
186 return (CtfIterator) fTrace.createIteratorFromContext(this);
187 }
188 }
This page took 0.037521 seconds and 5 git commands to generate.