18a8a9e78d448fa4352a11376084ed686bd0cae1
[deliverable/tracecompass.git] / org.eclipse.linuxtools.lttng2.kernel.ui / src / org / eclipse / linuxtools / internal / lttng2 / kernel / ui / views / common / EventIterator.java
1 /*******************************************************************************
2 * Copyright (c) 2012 Ericsson
3 *
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
8 *
9 * Contributors:
10 * Patrick Tasse - Initial API and implementation
11 *******************************************************************************/
12
13 package org.eclipse.linuxtools.internal.lttng2.kernel.ui.views.common;
14
15 import java.util.Iterator;
16 import java.util.List;
17 import java.util.NoSuchElementException;
18
19 import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.model.ITimeEvent;
20 import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.model.TimeEvent;
21
22 public class EventIterator implements Iterator<ITimeEvent> {
23
24 private long fStartTime;
25 private long fEndTime;
26 private List<ITimeEvent> fEventList;
27 private List<ITimeEvent> fZoomedEventList;
28 private long fZoomedStartTime;
29 private long fZoomedEndTime;
30 private int fIndex = 0;
31 private int fZoomedIndex= 0;
32 private ITimeEvent fNext = null;
33 private ITimeEvent fZoomedNext = null;
34
35 public EventIterator(List<ITimeEvent> eventList, List<ITimeEvent> zoomedEventList) {
36 this(eventList, zoomedEventList, Long.MIN_VALUE, Long.MAX_VALUE);
37 }
38
39 public EventIterator(List<ITimeEvent> eventList, List<ITimeEvent> zoomedEventList, long startTime, long endTime) {
40 fEventList = eventList;
41 fZoomedEventList = zoomedEventList;
42 if (zoomedEventList != null && zoomedEventList.size() > 0) {
43 fZoomedStartTime = zoomedEventList.get(0).getTime();
44 ITimeEvent lastEvent = zoomedEventList.get(zoomedEventList.size() - 1);
45 fZoomedEndTime = lastEvent.getTime() + lastEvent.getDuration();
46 } else {
47 fZoomedStartTime = Long.MAX_VALUE;
48 fZoomedEndTime = Long.MIN_VALUE;
49 }
50 fStartTime = startTime;
51 fEndTime = endTime;
52 }
53
54 @Override
55 public boolean hasNext() {
56 if (fNext == null && fEventList != null) {
57 while (fIndex < fEventList.size()) {
58 ITimeEvent event = fEventList.get(fIndex++);
59 if (event.getTime() + event.getDuration() >= fStartTime && event.getTime() <= fEndTime) {
60 fNext = event;
61 break;
62 }
63 }
64 if (fNext == null) {
65 fEventList = null;
66 }
67 }
68
69 if (fZoomedNext == null && fZoomedEventList != null) {
70 while (fZoomedIndex < fZoomedEventList.size()) {
71 ITimeEvent event = fZoomedEventList.get(fZoomedIndex++);
72 if (event.getTime() + event.getDuration() >= fStartTime && event.getTime() <= fEndTime) {
73 fZoomedNext = event;
74 break;
75 }
76 }
77 if (fZoomedNext == null) {
78 fZoomedEventList = null;
79 }
80 }
81
82 return fNext != null || fZoomedNext != null;
83 }
84
85 @Override
86 public ITimeEvent next() {
87 if (hasNext()) {
88 if (fZoomedNext != null && (fNext == null || fZoomedNext.getTime() <= fNext.getTime())) {
89 if (fNext != null && fNext.getTime() == fZoomedNext.getTime()) {
90 long duration = fNext.getTime() + fNext.getDuration() - fZoomedEndTime;
91 if (duration > 0) {
92 fNext = new TimeEvent(fNext.getEntry(), fZoomedEndTime, duration);
93 } else {
94 fNext = null;
95 }
96 }
97 ITimeEvent event = fZoomedNext;
98 fZoomedNext = null;
99 return event;
100 }
101 if (fNext.getTime() < fZoomedEndTime && fNext.getTime() + fNext.getDuration() > fZoomedStartTime) {
102 ITimeEvent event = new TimeEvent(fNext.getEntry(), fNext.getTime(), fZoomedStartTime - fNext.getTime());
103 long duration = fNext.getTime() + fNext.getDuration() - fZoomedEndTime;
104 if (duration > 0) {
105 fNext = new TimeEvent(fNext.getEntry(), fZoomedEndTime, duration);
106 } else {
107 fNext = null;
108 }
109 return event;
110 }
111 ITimeEvent event = fNext;
112 fNext = null;
113 return event;
114 }
115 throw new NoSuchElementException();
116 }
117
118 @Override
119 public void remove() {
120 throw new UnsupportedOperationException();
121 }
122 }
This page took 0.044806 seconds and 5 git commands to generate.