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