You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2015/07/07 19:58:34 UTC
[3/5] incubator-calcite git commit: Add Ord.reverse
Add Ord.reverse
Project: http://git-wip-us.apache.org/repos/asf/incubator-calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-calcite/commit/d35df363
Tree: http://git-wip-us.apache.org/repos/asf/incubator-calcite/tree/d35df363
Diff: http://git-wip-us.apache.org/repos/asf/incubator-calcite/diff/d35df363
Branch: refs/heads/master
Commit: d35df363b4eccc9c6dc85c507b38b3a2334148db
Parents: a76a201
Author: Julian Hyde <jh...@apache.org>
Authored: Tue Jun 30 11:49:59 2015 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Mon Jul 6 20:49:53 2015 -0700
----------------------------------------------------------------------
.../java/org/apache/calcite/util/UtilTest.java | 20 ++++++++
.../java/org/apache/calcite/linq4j/Ord.java | 49 ++++++++++++++++++--
2 files changed, 65 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/d35df363/core/src/test/java/org/apache/calcite/util/UtilTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/util/UtilTest.java b/core/src/test/java/org/apache/calcite/util/UtilTest.java
index 2d731a7..92b5c34 100644
--- a/core/src/test/java/org/apache/calcite/util/UtilTest.java
+++ b/core/src/test/java/org/apache/calcite/util/UtilTest.java
@@ -19,6 +19,7 @@ package org.apache.calcite.util;
import org.apache.calcite.avatica.AvaticaUtils;
import org.apache.calcite.avatica.util.Spaces;
import org.apache.calcite.examples.RelBuilderExample;
+import org.apache.calcite.linq4j.Ord;
import org.apache.calcite.linq4j.function.Function1;
import org.apache.calcite.runtime.FlatLists;
import org.apache.calcite.runtime.Resources;
@@ -1381,6 +1382,25 @@ public class UtilTest {
@Test public void testRelBuilderExample() {
new RelBuilderExample(false).runAllExamples();
}
+
+ @Test public void testOrdReverse() {
+ checkOrdReverse(Ord.reverse(Arrays.asList("a", "b", "c")));
+ checkOrdReverse(Ord.reverse("a", "b", "c"));
+ assertThat(Ord.reverse(ImmutableList.<String>of()).iterator().hasNext(),
+ is(false));
+ assertThat(Ord.reverse().iterator().hasNext(), is(false));
+ }
+
+ private void checkOrdReverse(Iterable<Ord<String>> reverse1) {
+ final Iterator<Ord<String>> reverse = reverse1.iterator();
+ assertThat(reverse.hasNext(), is(true));
+ assertThat(reverse.next().i, is(2));
+ assertThat(reverse.hasNext(), is(true));
+ assertThat(reverse.next().e, is("b"));
+ assertThat(reverse.hasNext(), is(true));
+ assertThat(reverse.next().e, is("a"));
+ assertThat(reverse.hasNext(), is(false));
+ }
}
// End UtilTest.java
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/d35df363/linq4j/src/main/java/org/apache/calcite/linq4j/Ord.java
----------------------------------------------------------------------
diff --git a/linq4j/src/main/java/org/apache/calcite/linq4j/Ord.java b/linq4j/src/main/java/org/apache/calcite/linq4j/Ord.java
index c7eedf5..0ef3df6 100644
--- a/linq4j/src/main/java/org/apache/calcite/linq4j/Ord.java
+++ b/linq4j/src/main/java/org/apache/calcite/linq4j/Ord.java
@@ -16,6 +16,8 @@
*/
package org.apache.calcite.linq4j;
+import com.google.common.collect.ImmutableList;
+
import java.util.AbstractList;
import java.util.Iterator;
import java.util.List;
@@ -43,7 +45,7 @@ public class Ord<E> implements Map.Entry<Integer, E> {
* Creates an Ord.
*/
public static <E> Ord<E> of(int n, E e) {
- return new Ord<E>(n, e);
+ return new Ord<>(n, e);
}
/**
@@ -82,7 +84,7 @@ public class Ord<E> implements Map.Entry<Integer, E> {
* Returns a numbered list based on an array.
*/
public static <E> List<Ord<E>> zip(final E[] elements) {
- return new OrdArrayList<E>(elements);
+ return new OrdArrayList<>(elements);
}
/**
@@ -90,8 +92,47 @@ public class Ord<E> implements Map.Entry<Integer, E> {
*/
public static <E> List<Ord<E>> zip(final List<? extends E> elements) {
return elements instanceof RandomAccess
- ? new OrdRandomAccessList<E>(elements)
- : new OrdList<E>(elements);
+ ? new OrdRandomAccessList<>(elements)
+ : new OrdList<>(elements);
+ }
+
+ /**
+ * Iterates over an array in reverse order.
+ *
+ * <p>Given the array ["a", "b", "c"], returns (2, "c") then (1, "b") then
+ * (0, "a").
+ */
+ public static <E> Iterable<Ord<E>> reverse(E... elements) {
+ return reverse(ImmutableList.copyOf(elements));
+ }
+
+ /**
+ * Iterates over a list in reverse order.
+ *
+ * <p>Given the list ["a", "b", "c"], returns (2, "c") then (1, "b") then
+ * (0, "a").
+ */
+ public static <E> Iterable<Ord<E>> reverse(Iterable<? extends E> elements) {
+ final ImmutableList<E> elementList = ImmutableList.copyOf(elements);
+ return new Iterable<Ord<E>>() {
+ public Iterator<Ord<E>> iterator() {
+ return new Iterator<Ord<E>>() {
+ int i = elementList.size() - 1;
+
+ public boolean hasNext() {
+ return i >= 0;
+ }
+
+ public Ord<E> next() {
+ return Ord.of(i, elementList.get(i--));
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException("remove");
+ }
+ };
+ }
+ };
}
public Integer getKey() {