From 46fc0d70ed7e7c0ea60ce60cf76f6ead996153cd Mon Sep 17 00:00:00 2001 From: Greg Hogan Date: Wed, 1 Jun 2016 12:29:16 -0400 Subject: [PATCH] [FLINK-4003] Use intrinsics for MathUtils logarithms --- .../java/org/apache/flink/util/MathUtils.java | 17 +++-------------- .../asm/translate/LongValueToIntValue.java | 9 ++------- 2 files changed, 5 insertions(+), 21 deletions(-) diff --git a/flink-core/src/main/java/org/apache/flink/util/MathUtils.java b/flink-core/src/main/java/org/apache/flink/util/MathUtils.java index 2bdddc8cccd9f..f9aca16bcbd5b 100644 --- a/flink-core/src/main/java/org/apache/flink/util/MathUtils.java +++ b/flink-core/src/main/java/org/apache/flink/util/MathUtils.java @@ -37,13 +37,8 @@ public static int log2floor(int value) throws ArithmeticException { if (value == 0) { throw new ArithmeticException("Logarithm of zero is undefined."); } - - int log = 0; - while ((value = value >>> 1) != 0) { - log++; - } - - return log; + + return 31 - Integer.numberOfLeadingZeros(value); } /** @@ -62,13 +57,7 @@ public static int log2strict(int value) throws ArithmeticException, IllegalArgum if ((value & (value - 1)) != 0) { throw new IllegalArgumentException("The given value " + value + " is not a power of two."); } - - int log = 0; - while ((value = value >>> 1) != 0) { - log++; - } - - return log; + return 31 - Integer.numberOfLeadingZeros(value); } /** diff --git a/flink-libraries/flink-gelly/src/main/java/org/apache/flink/graph/asm/translate/LongValueToIntValue.java b/flink-libraries/flink-gelly/src/main/java/org/apache/flink/graph/asm/translate/LongValueToIntValue.java index 7ed63b7399f47..adaf592eb8221 100644 --- a/flink-libraries/flink-gelly/src/main/java/org/apache/flink/graph/asm/translate/LongValueToIntValue.java +++ b/flink-libraries/flink-gelly/src/main/java/org/apache/flink/graph/asm/translate/LongValueToIntValue.java @@ -20,6 +20,7 @@ import org.apache.flink.types.IntValue; import org.apache.flink.types.LongValue; +import org.apache.flink.util.MathUtils; /** * Translate {@link LongValue} to {@link IntValue}. @@ -32,17 +33,11 @@ public class LongValueToIntValue @Override public IntValue translate(LongValue value, IntValue reuse) throws Exception { - long val = value.getValue(); - - if (val > Integer.MAX_VALUE) { - throw new RuntimeException("LongValue input overflows IntValue output"); - } - if (reuse == null) { reuse = new IntValue(); } - reuse.setValue((int) val); + reuse.setValue(MathUtils.checkedDownCast(value.getValue())); return reuse; } }