You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by si...@apache.org on 2011/11/24 18:20:36 UTC
svn commit: r1205937 - in /lucene/dev/trunk/lucene/src:
java/org/apache/lucene/index/values/ java/org/apache/lucene/util/
test/org/apache/lucene/index/values/
Author: simonw
Date: Thu Nov 24 17:20:35 2011
New Revision: 1205937
URL: http://svn.apache.org/viewvc?rev=1205937&view=rev
Log:
LUCENE-3591: Make BytesRef.copy[Int,Short,Long] package private for IndexDocValues
Added:
lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/values/BytesRefUtils.java (with props)
Modified:
lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/values/IndexDocValuesArray.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/values/PackedIntValues.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/BytesRef.java
lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/values/TestTypePromotion.java
Added: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/values/BytesRefUtils.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/values/BytesRefUtils.java?rev=1205937&view=auto
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/values/BytesRefUtils.java (added)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/values/BytesRefUtils.java Thu Nov 24 17:20:35 2011
@@ -0,0 +1,120 @@
+package org.apache.lucene.index.values;
+
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+import org.apache.lucene.util.BytesRef;
+
+/**
+ * Package private BytesRefUtils - can move this into the o.a.l.utils package if
+ * needed.
+ *
+ * @lucene.internal
+ */
+final class BytesRefUtils {
+
+ private BytesRefUtils() {
+ }
+
+ /**
+ * Copies the given long value and encodes it as 8 byte Big-Endian.
+ * <p>
+ * NOTE: this method resets the offset to 0, length to 8 and resizes the
+ * reference array if needed.
+ */
+ public static void copyLong(BytesRef ref, long value) {
+ if (ref.bytes.length < 8) {
+ ref.bytes = new byte[8];
+ }
+ copyInternal(ref, (int) (value >> 32), ref.offset = 0);
+ copyInternal(ref, (int) value, 4);
+ ref.length = 8;
+ }
+
+ /**
+ * Copies the given int value and encodes it as 4 byte Big-Endian.
+ * <p>
+ * NOTE: this method resets the offset to 0, length to 4 and resizes the
+ * reference array if needed.
+ */
+ public static void copyInt(BytesRef ref, int value) {
+ if (ref.bytes.length < 4) {
+ ref.bytes = new byte[4];
+ }
+ copyInternal(ref, value, ref.offset = 0);
+ ref.length = 4;
+ }
+
+ /**
+ * Copies the given short value and encodes it as a 2 byte Big-Endian.
+ * <p>
+ * NOTE: this method resets the offset to 0, length to 2 and resizes the
+ * reference array if needed.
+ */
+ public static void copyShort(BytesRef ref, short value) {
+ if (ref.bytes.length < 2) {
+ ref.bytes = new byte[2];
+ }
+ ref.bytes[ref.offset] = (byte) (value >> 8);
+ ref.bytes[ref.offset + 1] = (byte) (value);
+ ref.length = 2;
+ }
+
+ private static void copyInternal(BytesRef ref, int value, int startOffset) {
+ ref.bytes[startOffset] = (byte) (value >> 24);
+ ref.bytes[startOffset + 1] = (byte) (value >> 16);
+ ref.bytes[startOffset + 2] = (byte) (value >> 8);
+ ref.bytes[startOffset + 3] = (byte) (value);
+ }
+
+ /**
+ * Converts 2 consecutive bytes from the current offset to a short. Bytes are
+ * interpreted as Big-Endian (most significant bit first)
+ * <p>
+ * NOTE: this method does <b>NOT</b> check the bounds of the referenced array.
+ */
+ public static short asShort(BytesRef b) {
+ return (short) (0xFFFF & ((b.bytes[b.offset] & 0xFF) << 8) | (b.bytes[b.offset + 1] & 0xFF));
+ }
+
+ /**
+ * Converts 4 consecutive bytes from the current offset to an int. Bytes are
+ * interpreted as Big-Endian (most significant bit first)
+ * <p>
+ * NOTE: this method does <b>NOT</b> check the bounds of the referenced array.
+ */
+ public static int asInt(BytesRef b) {
+ return asIntInternal(b, b.offset);
+ }
+
+ /**
+ * Converts 8 consecutive bytes from the current offset to a long. Bytes are
+ * interpreted as Big-Endian (most significant bit first)
+ * <p>
+ * NOTE: this method does <b>NOT</b> check the bounds of the referenced array.
+ */
+ public static long asLong(BytesRef b) {
+ return (((long) asIntInternal(b, b.offset) << 32) | asIntInternal(b,
+ b.offset + 4) & 0xFFFFFFFFL);
+ }
+
+ private static int asIntInternal(BytesRef b, int pos) {
+ return ((b.bytes[pos++] & 0xFF) << 24) | ((b.bytes[pos++] & 0xFF) << 16)
+ | ((b.bytes[pos++] & 0xFF) << 8) | (b.bytes[pos] & 0xFF);
+ }
+
+}
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/values/IndexDocValuesArray.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/values/IndexDocValuesArray.java?rev=1205937&r1=1205936&r2=1205937&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/values/IndexDocValuesArray.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/values/IndexDocValuesArray.java Thu Nov 24 17:20:35 2011
@@ -62,11 +62,11 @@ abstract class IndexDocValuesArray exten
}
void toBytes(long value, BytesRef bytesRef) {
- bytesRef.copyLong(value);
+ BytesRefUtils.copyLong(bytesRef, value);
}
void toBytes(double value, BytesRef bytesRef) {
- bytesRef.copyLong(Double.doubleToRawLongBits(value));
+ BytesRefUtils.copyLong(bytesRef, Double.doubleToRawLongBits(value));
}
final static class ByteValues extends IndexDocValuesArray {
@@ -140,7 +140,7 @@ abstract class IndexDocValuesArray exten
}
void toBytes(long value, BytesRef bytesRef) {
- bytesRef.copyShort((short) (0xFFFFL & value));
+ BytesRefUtils.copyShort(bytesRef, (short) (0xFFFFL & value));
}
};
@@ -179,7 +179,7 @@ abstract class IndexDocValuesArray exten
}
void toBytes(long value, BytesRef bytesRef) {
- bytesRef.copyInt((int) (0xFFFFFFFF & value));
+ BytesRefUtils.copyInt(bytesRef, (int) (0xFFFFFFFF & value));
}
};
@@ -252,7 +252,7 @@ abstract class IndexDocValuesArray exten
@Override
void toBytes(double value, BytesRef bytesRef) {
- bytesRef.copyInt(Float.floatToRawIntBits((float)value));
+ BytesRefUtils.copyInt(bytesRef, Float.floatToRawIntBits((float)value));
}
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/values/PackedIntValues.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/values/PackedIntValues.java?rev=1205937&r1=1205936&r2=1205937&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/values/PackedIntValues.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/values/PackedIntValues.java Thu Nov 24 17:20:35 2011
@@ -73,7 +73,7 @@ class PackedIntValues {
}
}
lastDocId = docID;
- bytesRef.copyLong(v);
+ BytesRefUtils.copyLong(bytesRef, v);
add(docID, bytesRef);
}
@@ -244,7 +244,7 @@ class PackedIntValues {
@Override
public BytesRef getBytes(int docID, BytesRef ref) {
ref.grow(8);
- ref.copyLong(getInt(docID));
+ BytesRefUtils.copyLong(ref, getInt(docID));
return ref;
}
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/BytesRef.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/BytesRef.java?rev=1205937&r1=1205936&r2=1205937&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/BytesRef.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/BytesRef.java Thu Nov 24 17:20:35 2011
@@ -221,56 +221,7 @@ public final class BytesRef implements C
offset = 0;
}
- /**
- * Copies the given long value and encodes it as 8 byte Big-Endian.
- * <p>
- * NOTE: this method resets the offset to 0, length to 8 and resizes the reference array
- * if needed.
- */
- public void copyLong(long value) {
- if (bytes.length < 8) {
- bytes = new byte[8];
- }
- copyInternal((int) (value >> 32), offset = 0);
- copyInternal((int) value, 4);
- length = 8;
- }
-
- /**
- * Copies the given int value and encodes it as 4 byte Big-Endian.
- * <p>
- * NOTE: this method resets the offset to 0, length to 4 and resizes the reference array
- * if needed.
- */
- public void copyInt(int value) {
- if (bytes.length < 4) {
- bytes = new byte[4];
- }
- copyInternal(value, offset = 0);
- length = 4;
- }
- /**
- * Copies the given short value and encodes it as a 2 byte Big-Endian.
- * <p>
- * NOTE: this method resets the offset to 0, length to 2 and resizes the reference array
- * if needed.
- */
- public void copyShort(short value) {
- if (bytes.length < 2) {
- bytes = new byte[2];
- }
- bytes[offset] = (byte) (value >> 8);
- bytes[offset + 1] = (byte) (value);
- length = 2;
- }
-
- private void copyInternal(int value, int startOffset) {
- bytes[startOffset] = (byte) (value >> 24);
- bytes[startOffset + 1] = (byte) (value >> 16);
- bytes[startOffset + 2] = (byte) (value >> 8);
- bytes[startOffset + 3] = (byte) (value);
- }
public void append(BytesRef other) {
int newLen = length + other.length;
Modified: lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/values/TestTypePromotion.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/values/TestTypePromotion.java?rev=1205937&r1=1205936&r2=1205937&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/values/TestTypePromotion.java (original)
+++ lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/values/TestTypePromotion.java Thu Nov 24 17:20:35 2011
@@ -116,35 +116,6 @@ public class TestTypePromotion extends L
dir.close();
}
- private short asShort(BytesRef b) {
- int pos = b.offset;
- return (short) (0xFFFF & ((b.bytes[pos++] & 0xFF) << 8) | (b.bytes[pos] & 0xFF));
- }
-
- /**
- * Converts 4 consecutive bytes from the current offset to an int. Bytes are
- * interpreted as Big-Endian (most significant bit first)
- * <p>
- * NOTE: this method does <b>NOT</b> check the bounds of the referenced array.
- */
- private int asInt(BytesRef b) {
- return asIntInternal(b, b.offset);
- }
-
- /**
- * Converts 8 consecutive bytes from the current offset to a long. Bytes are
- * interpreted as Big-Endian (most significant bit first)
- * <p>
- * NOTE: this method does <b>NOT</b> check the bounds of the referenced array.
- */
- private long asLong(BytesRef b) {
- return (((long) asIntInternal(b, b.offset) << 32) | asIntInternal(b, b.offset + 4) & 0xFFFFFFFFL);
- }
-
- private int asIntInternal(BytesRef b, int pos) {
- return ((b.bytes[pos++] & 0xFF) << 24) | ((b.bytes[pos++] & 0xFF) << 16)
- | ((b.bytes[pos++] & 0xFF) << 8) | (b.bytes[pos] & 0xFF);
- }
private void assertValues(TestType type, Directory dir, long[] values)
throws CorruptIndexException, IOException {
@@ -167,13 +138,13 @@ public class TestTypePromotion extends L
value = bytes.bytes[bytes.offset];
break;
case 2:
- value = asShort(bytes);
+ value = BytesRefUtils.asShort(bytes);
break;
case 4:
- value = asInt(bytes);
+ value = BytesRefUtils.asInt(bytes);
break;
case 8:
- value = asLong(bytes);
+ value = BytesRefUtils.asLong(bytes);
break;
default:
@@ -239,18 +210,18 @@ public class TestTypePromotion extends L
case BYTES_FIXED_SORTED:
case BYTES_FIXED_STRAIGHT:
values[i] = random.nextLong();
- ref.copyLong(values[i]);
+ BytesRefUtils.copyLong(ref, values[i]);
valField.setBytes(ref, valueType);
break;
case BYTES_VAR_DEREF:
case BYTES_VAR_SORTED:
case BYTES_VAR_STRAIGHT:
if (random.nextBoolean()) {
- ref.copyInt(random.nextInt());
- values[i] = asInt(ref);
+ BytesRefUtils.copyInt(ref, random.nextInt());
+ values[i] = BytesRefUtils.asInt(ref);
} else {
- ref.copyLong(random.nextLong());
- values[i] = asLong(ref);
+ BytesRefUtils.copyLong(ref, random.nextLong());
+ values[i] = BytesRefUtils.asLong(ref);
}
valField.setBytes(ref, valueType);
break;