-/*******************************************************************************\r
- * Copyright (c) 2012 Ericsson\r
- *\r
- * All rights reserved. This program and the accompanying materials are\r
- * made available under the terms of the Eclipse Public License v1.0 which\r
- * accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- * Patrick Tasse - Initial API and implementation\r
- *******************************************************************************/\r
-\r
-package org.eclipse.linuxtools.internal.lttng2.kernel.ui.views.common;\r
-\r
-import java.util.Iterator;\r
-import java.util.List;\r
-import java.util.NoSuchElementException;\r
-\r
-import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.model.ITimeEvent;\r
-import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.model.TimeEvent;\r
-\r
-/**\r
- * An iterator for time events\r
- */\r
-public class EventIterator implements Iterator<ITimeEvent> {\r
-\r
- private final long fStartTime;\r
- private final long fEndTime;\r
- private List<ITimeEvent> fEventList;\r
- private List<ITimeEvent> fZoomedEventList;\r
- private long fZoomedStartTime;\r
- private long fZoomedEndTime;\r
- private int fIndex = 0;\r
- private int fZoomedIndex= 0;\r
- private ITimeEvent fNext = null;\r
- private ITimeEvent fZoomedNext = null;\r
-\r
- /**\r
- * Basic constructor, with start time and end times equal to the lowest and\r
- * highest values possible, respectively.\r
- *\r
- * @param eventList\r
- * The list on which this iterator will iterate\r
- * @param zoomedEventList\r
- * The "zoomed" list\r
- */\r
- public EventIterator(List<ITimeEvent> eventList, List<ITimeEvent> zoomedEventList) {\r
- this(eventList, zoomedEventList, Long.MIN_VALUE, Long.MAX_VALUE);\r
- }\r
-\r
- /**\r
- * Complete constructor, where we specify start and end times.\r
- *\r
- * @param eventList\r
- * The list on which this iterator will iterate\r
- * @param zoomedEventList\r
- * The "zoomed" list\r
- * @param startTime\r
- * The start time\r
- * @param endTime\r
- * The end time\r
- */\r
- public EventIterator(List<ITimeEvent> eventList,\r
- List<ITimeEvent> zoomedEventList, long startTime, long endTime) {\r
- fEventList = eventList;\r
- fZoomedEventList = zoomedEventList;\r
- if (zoomedEventList != null && zoomedEventList.size() > 0) {\r
- fZoomedStartTime = zoomedEventList.get(0).getTime();\r
- ITimeEvent lastEvent = zoomedEventList.get(zoomedEventList.size() - 1);\r
- fZoomedEndTime = lastEvent.getTime() + lastEvent.getDuration();\r
- } else {\r
- fZoomedStartTime = Long.MAX_VALUE;\r
- fZoomedEndTime = Long.MIN_VALUE;\r
- }\r
- fStartTime = startTime;\r
- fEndTime = endTime;\r
- }\r
-\r
- @Override\r
- public boolean hasNext() {\r
- if (fNext == null && fEventList != null) {\r
- while (fIndex < fEventList.size()) {\r
- ITimeEvent event = fEventList.get(fIndex++);\r
- if (event.getTime() + event.getDuration() >= fStartTime && event.getTime() <= fEndTime) {\r
- fNext = event;\r
- break;\r
- }\r
- }\r
- if (fNext == null) {\r
- fEventList = null;\r
- }\r
- }\r
-\r
- if (fZoomedNext == null && fZoomedEventList != null) {\r
- while (fZoomedIndex < fZoomedEventList.size()) {\r
- ITimeEvent event = fZoomedEventList.get(fZoomedIndex++);\r
- if (event.getTime() + event.getDuration() >= fStartTime && event.getTime() <= fEndTime) {\r
- fZoomedNext = event;\r
- break;\r
- }\r
- }\r
- if (fZoomedNext == null) {\r
- fZoomedEventList = null;\r
- }\r
- }\r
-\r
- return fNext != null || fZoomedNext != null;\r
- }\r
-\r
- @Override\r
- public ITimeEvent next() {\r
- if (hasNext()) {\r
- if (fZoomedNext != null && (fNext == null || fZoomedNext.getTime() <= fNext.getTime())) {\r
- if (fNext != null && fNext.getTime() == fZoomedNext.getTime()) {\r
- long duration = fNext.getTime() + fNext.getDuration() - fZoomedEndTime;\r
- if (duration > 0) {\r
- fNext = new TimeEvent(fNext.getEntry(), fZoomedEndTime, duration);\r
- } else {\r
- fNext = null;\r
- }\r
- }\r
- ITimeEvent event = fZoomedNext;\r
- fZoomedNext = null;\r
- return event;\r
- }\r
- if (fNext.getTime() < fZoomedEndTime && fNext.getTime() + fNext.getDuration() > fZoomedStartTime) {\r
- ITimeEvent event = new TimeEvent(fNext.getEntry(), fNext.getTime(), fZoomedStartTime - fNext.getTime());\r
- long duration = fNext.getTime() + fNext.getDuration() - fZoomedEndTime;\r
- if (duration > 0) {\r
- fNext = new TimeEvent(fNext.getEntry(), fZoomedEndTime, duration);\r
- } else {\r
- fNext = null;\r
- }\r
- return event;\r
- }\r
- ITimeEvent event = fNext;\r
- fNext = null;\r
- return event;\r
- }\r
- throw new NoSuchElementException();\r
- }\r
-\r
- @Override\r
- public void remove() {\r
- throw new UnsupportedOperationException();\r
- }\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2012 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
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.internal.lttng2.kernel.ui.views.common;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.model.ITimeEvent;
+import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.model.TimeEvent;
+
+/**
+ * An iterator for time events
+ */
+public class EventIterator implements Iterator<ITimeEvent> {
+
+ private final long fStartTime;
+ private final long fEndTime;
+ private List<ITimeEvent> fEventList;
+ private List<ITimeEvent> fZoomedEventList;
+ private long fZoomedStartTime;
+ private long fZoomedEndTime;
+ private int fIndex = 0;
+ private int fZoomedIndex= 0;
+ private ITimeEvent fNext = null;
+ private ITimeEvent fZoomedNext = null;
+
+ /**
+ * Basic constructor, with start time and end times equal to the lowest and
+ * highest values possible, respectively.
+ *
+ * @param eventList
+ * The list on which this iterator will iterate
+ * @param zoomedEventList
+ * The "zoomed" list
+ */
+ public EventIterator(List<ITimeEvent> eventList, List<ITimeEvent> zoomedEventList) {
+ this(eventList, zoomedEventList, Long.MIN_VALUE, Long.MAX_VALUE);
+ }
+
+ /**
+ * Complete constructor, where we specify start and end times.
+ *
+ * @param eventList
+ * The list on which this iterator will iterate
+ * @param zoomedEventList
+ * The "zoomed" list
+ * @param startTime
+ * The start time
+ * @param endTime
+ * The end time
+ */
+ public EventIterator(List<ITimeEvent> eventList,
+ List<ITimeEvent> zoomedEventList, long startTime, long endTime) {
+ fEventList = eventList;
+ fZoomedEventList = zoomedEventList;
+ if (zoomedEventList != null && zoomedEventList.size() > 0) {
+ fZoomedStartTime = zoomedEventList.get(0).getTime();
+ ITimeEvent lastEvent = zoomedEventList.get(zoomedEventList.size() - 1);
+ fZoomedEndTime = lastEvent.getTime() + lastEvent.getDuration();
+ } else {
+ fZoomedStartTime = Long.MAX_VALUE;
+ fZoomedEndTime = Long.MIN_VALUE;
+ }
+ fStartTime = startTime;
+ fEndTime = endTime;
+ }
+
+ @Override
+ public boolean hasNext() {
+ if (fNext == null && fEventList != null) {
+ while (fIndex < fEventList.size()) {
+ ITimeEvent event = fEventList.get(fIndex++);
+ if (event.getTime() + event.getDuration() >= fStartTime && event.getTime() <= fEndTime) {
+ fNext = event;
+ break;
+ }
+ }
+ if (fNext == null) {
+ fEventList = null;
+ }
+ }
+
+ if (fZoomedNext == null && fZoomedEventList != null) {
+ while (fZoomedIndex < fZoomedEventList.size()) {
+ ITimeEvent event = fZoomedEventList.get(fZoomedIndex++);
+ if (event.getTime() + event.getDuration() >= fStartTime && event.getTime() <= fEndTime) {
+ fZoomedNext = event;
+ break;
+ }
+ }
+ if (fZoomedNext == null) {
+ fZoomedEventList = null;
+ }
+ }
+
+ return fNext != null || fZoomedNext != null;
+ }
+
+ @Override
+ public ITimeEvent next() {
+ if (hasNext()) {
+ if (fZoomedNext != null && (fNext == null || fZoomedNext.getTime() <= fNext.getTime())) {
+ if (fNext != null && fNext.getTime() == fZoomedNext.getTime()) {
+ long duration = fNext.getTime() + fNext.getDuration() - fZoomedEndTime;
+ if (duration > 0) {
+ fNext = new TimeEvent(fNext.getEntry(), fZoomedEndTime, duration);
+ } else {
+ fNext = null;
+ }
+ }
+ ITimeEvent event = fZoomedNext;
+ fZoomedNext = null;
+ return event;
+ }
+ if (fNext.getTime() < fZoomedEndTime && fNext.getTime() + fNext.getDuration() > fZoomedStartTime) {
+ ITimeEvent event = new TimeEvent(fNext.getEntry(), fNext.getTime(), fZoomedStartTime - fNext.getTime());
+ long duration = fNext.getTime() + fNext.getDuration() - fZoomedEndTime;
+ if (duration > 0) {
+ fNext = new TimeEvent(fNext.getEntry(), fZoomedEndTime, duration);
+ } else {
+ fNext = null;
+ }
+ return event;
+ }
+ ITimeEvent event = fNext;
+ fNext = null;
+ return event;
+ }
+ throw new NoSuchElementException();
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+}