diff options
author | Tammo Spalink <tammo@google.com> | 2009-06-24 14:12:53 +0800 |
---|---|---|
committer | Tammo Spalink <tammo@google.com> | 2009-06-24 14:42:33 +0800 |
commit | 326c66d888f9b3ce82af93fe63e4828a4a4e3fbe (patch) | |
tree | eb19ba7bdbab4ceedd1622efc88c4b395b670292 | |
parent | 4fb69770e70352c987cc79414db7a03b52296ca7 (diff) | |
download | frameworks_base-326c66d888f9b3ce82af93fe63e4828a4a4e3fbe.zip frameworks_base-326c66d888f9b3ce82af93fe63e4828a4a4e3fbe.tar.gz frameworks_base-326c66d888f9b3ce82af93fe63e4828a4a4e3fbe.tar.bz2 |
make BitwiseInputStream.read return int
Keep the maximum access 8 bits to avoid dealing with
endianness issues.
5 files changed, 48 insertions, 25 deletions
diff --git a/core/java/com/android/internal/util/BitwiseInputStream.java b/core/java/com/android/internal/util/BitwiseInputStream.java index 4757919..031abdd 100644 --- a/core/java/com/android/internal/util/BitwiseInputStream.java +++ b/core/java/com/android/internal/util/BitwiseInputStream.java @@ -69,19 +69,19 @@ public class BitwiseInputStream { * * @return byte of read data (possibly partially filled, from lsb) */ - public byte read(int bits) throws AccessException { + public int read(int bits) throws AccessException { int index = mPos >>> 3; int offset = 16 - (mPos & 0x07) - bits; // &7==%8 if ((bits < 0) || (bits > 8) || ((mPos + bits) > mEnd)) { throw new AccessException("illegal read " + "(pos " + mPos + ", end " + mEnd + ", bits " + bits + ")"); } - int data = (mBuf[index] & 0x00FF) << 8; - if (offset < 8) data |= (mBuf[index + 1] & 0xFF); + int data = (mBuf[index] & 0xFF) << 8; + if (offset < 8) data |= mBuf[index + 1] & 0xFF; data >>>= offset; data &= (-1 >>> (32 - bits)); mPos += bits; - return (byte)data; + return data; } /** diff --git a/core/java/com/android/internal/util/BitwiseOutputStream.java b/core/java/com/android/internal/util/BitwiseOutputStream.java index 1b974ce..ab8a7f3 100644 --- a/core/java/com/android/internal/util/BitwiseOutputStream.java +++ b/core/java/com/android/internal/util/BitwiseOutputStream.java @@ -95,8 +95,8 @@ public class BitwiseOutputStream { int offset = 16 - (mPos & 0x07) - bits; // &7==%8 data <<= offset; mPos += bits; - mBuf[index] |= (data >>> 8); - if (offset < 8) mBuf[index + 1] |= (data & 0x00FF); + mBuf[index] |= data >>> 8; + if (offset < 8) mBuf[index + 1] |= data & 0xFF; } /** diff --git a/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java b/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java index a835dee..03bdbda 100644 --- a/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java +++ b/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java @@ -789,7 +789,7 @@ public final class BearerData { if (inStream.read(8) != 3) { throw new CodingException("MESSAGE_IDENTIFIER subparam size incorrect"); } - bData.messageType = inStream.read(4); + bData.messageType = (byte)inStream.read(4); bData.messageId = inStream.read(8) << 8; bData.messageId |= inStream.read(8); bData.hasUserDataHeader = (inStream.read(1) == 1); @@ -799,7 +799,7 @@ public final class BearerData { private static void decodeUserData(BearerData bData, BitwiseInputStream inStream) throws BitwiseInputStream.AccessException { - byte paramBytes = inStream.read(8); + int paramBytes = inStream.read(8); bData.userData = new UserData(); bData.userData.msgEncoding = inStream.read(5); bData.userData.msgEncodingSet = true; @@ -867,7 +867,7 @@ public final class BearerData { inStream.skip(offset); byte[] expandedData = new byte[numFields]; for (int i = 0; i < numFields; i++) { - expandedData[i] = inStream.read(7); + expandedData[i] = (byte)inStream.read(7); } return new String(expandedData, 0, numFields, "US-ASCII"); } catch (java.io.UnsupportedEncodingException ex) { @@ -922,7 +922,7 @@ public final class BearerData { private static void decodeReplyOption(BearerData bData, BitwiseInputStream inStream) throws BitwiseInputStream.AccessException, CodingException { - byte paramBytes = inStream.read(8); + int paramBytes = inStream.read(8); if (paramBytes != 1) { throw new CodingException("REPLY_OPTION subparam size incorrect"); } @@ -985,18 +985,18 @@ public final class BearerData { private static void decodeCallbackNumber(BearerData bData, BitwiseInputStream inStream) throws BitwiseInputStream.AccessException, CodingException { - byte paramBytes = inStream.read(8); + int paramBytes = inStream.read(8); CdmaSmsAddress addr = new CdmaSmsAddress(); - addr.digitMode = inStream.read(1); + addr.digitMode = (byte)inStream.read(1); byte fieldBits = 4; byte consumedBits = 1; if (addr.digitMode == CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR) { addr.ton = inStream.read(3); - addr.numberPlan = inStream.read(4); + addr.numberPlan = (byte)inStream.read(4); fieldBits = 8; consumedBits += 7; } - addr.numberOfDigits = inStream.read(8); + addr.numberOfDigits = (byte)inStream.read(8); consumedBits += 8; int remainingBits = (paramBytes * 8) - consumedBits; int dataBits = addr.numberOfDigits * fieldBits; @@ -1076,7 +1076,7 @@ public final class BearerData { if (inStream.read(8) != 1) { throw new CodingException("PRIVACY_INDICATOR subparam size incorrect"); } - bData.privacy = inStream.read(2); + bData.privacy = (byte)inStream.read(2); inStream.skip(6); bData.privacyIndicatorSet = true; } @@ -1097,7 +1097,7 @@ public final class BearerData { if (inStream.read(8) != 1) { throw new CodingException("DISPLAY_MODE subparam size incorrect"); } - bData.displayMode = inStream.read(2); + bData.displayMode = (byte)inStream.read(2); inStream.skip(6); bData.displayModeSet = true; } @@ -1108,7 +1108,7 @@ public final class BearerData { if (inStream.read(8) != 1) { throw new CodingException("PRIORITY_INDICATOR subparam size incorrect"); } - bData.priority = inStream.read(2); + bData.priority = (byte)inStream.read(2); inStream.skip(6); bData.priorityIndicatorSet = true; } diff --git a/tests/AndroidTests/src/com/android/unit_tests/BitwiseStreamsTest.java b/tests/AndroidTests/src/com/android/unit_tests/BitwiseStreamsTest.java index a935247..c5562b3 100644 --- a/tests/AndroidTests/src/com/android/unit_tests/BitwiseStreamsTest.java +++ b/tests/AndroidTests/src/com/android/unit_tests/BitwiseStreamsTest.java @@ -25,6 +25,8 @@ import android.test.suitebuilder.annotation.SmallTest; import android.util.Log; +import java.util.Random; + public class BitwiseStreamsTest extends AndroidTestCase { private final static String LOG_TAG = "BitwiseStreamsTest"; @@ -39,7 +41,7 @@ public class BitwiseStreamsTest extends AndroidTestCase { BitwiseInputStream inStream = new BitwiseInputStream(outBuf); byte[] inBufDup = new byte[inBuf.length]; inStream.skip(offset); - for (int i = 0; i < inBufDup.length; i++) inBufDup[i] = inStream.read(8); + for (int i = 0; i < inBufDup.length; i++) inBufDup[i] = (byte)inStream.read(8); assertEquals(HexDump.toHexString(inBuf), HexDump.toHexString(inBufDup)); } @@ -53,7 +55,7 @@ public class BitwiseStreamsTest extends AndroidTestCase { BitwiseInputStream inStream = new BitwiseInputStream(outStream.toByteArray()); inStream.skip(offset); byte[] inBufDup = new byte[inBuf.length]; - for (int i = 0; i < inBufDup.length; i++) inBufDup[i] = inStream.read(8); + for (int i = 0; i < inBufDup.length; i++) inBufDup[i] = (byte)inStream.read(8); assertEquals(HexDump.toHexString(inBuf), HexDump.toHexString(inBufDup)); } @@ -67,7 +69,7 @@ public class BitwiseStreamsTest extends AndroidTestCase { BitwiseInputStream inStream = new BitwiseInputStream(outStream.toByteArray()); inStream.skip(offset); byte[] inBufDup = new byte[inBuf.length]; - for (int i = 0; i < inBufDup.length; i++) inBufDup[i] = inStream.read(8); + for (int i = 0; i < inBufDup.length; i++) inBufDup[i] = (byte)inStream.read(8); assertEquals(HexDump.toHexString(inBuf), HexDump.toHexString(inBufDup)); } @@ -84,12 +86,33 @@ public class BitwiseStreamsTest extends AndroidTestCase { BitwiseInputStream inStream = new BitwiseInputStream(outStream.toByteArray()); inStream.skip(offset); byte[] inBufDup = new byte[inBuf.length]; - for (int i = 0; i < inBufDup.length; i++) inBufDup[i] = inStream.read(8); + for (int i = 0; i < inBufDup.length; i++) inBufDup[i] = (byte)inStream.read(8); assertEquals(HexDump.toHexString(inBuf), HexDump.toHexString(inBufDup)); } @SmallTest public void testFive() throws Exception { + Random random = new Random(); + int iterations = 10000; + int[] sizeArr = new int[iterations]; + int[] valueArr = new int[iterations]; + BitwiseOutputStream outStream = new BitwiseOutputStream(iterations * 4); + for (int i = 0; i < iterations; i++) { + int x = random.nextInt(); + int size = (x & 0x07) + 1; + int value = x & (-1 >>> (32 - size)); + sizeArr[i] = size; + valueArr[i] = value; + outStream.write(size, value); + } + BitwiseInputStream inStream = new BitwiseInputStream(outStream.toByteArray()); + for (int i = 0; i < iterations; i++) { + assertEquals(valueArr[i], inStream.read(sizeArr[i])); + } + } + + @SmallTest + public void testSix() throws Exception { int num_runs = 10; long start = android.os.SystemClock.elapsedRealtime(); for (int run = 0; run < num_runs; run++) { @@ -104,7 +127,7 @@ public class BitwiseStreamsTest extends AndroidTestCase { BitwiseInputStream inStream = new BitwiseInputStream(outStream.toByteArray()); inStream.skip(offset); byte[] inBufDup = new byte[inBuf.length]; - for (int i = 0; i < inBufDup.length; i++) inBufDup[i] = inStream.read(8); + for (int i = 0; i < inBufDup.length; i++) inBufDup[i] = (byte)inStream.read(8); assertEquals(HexDump.toHexString(inBuf), HexDump.toHexString(inBufDup)); } long end = android.os.SystemClock.elapsedRealtime(); diff --git a/tests/AndroidTests/src/com/android/unit_tests/CdmaSmsTest.java b/tests/AndroidTests/src/com/android/unit_tests/CdmaSmsTest.java index b2529811..9188e04 100644 --- a/tests/AndroidTests/src/com/android/unit_tests/CdmaSmsTest.java +++ b/tests/AndroidTests/src/com/android/unit_tests/CdmaSmsTest.java @@ -171,14 +171,14 @@ public class CdmaSmsTest extends AndroidTestCase { assertEquals(bearerData.msgCenterTimeStamp.minute, 1); assertEquals(bearerData.msgCenterTimeStamp.second, 59); assertEquals(bearerData.validityPeriodAbsolute, null); - assertEquals(bearerData.validityPeriodRelative, -63); + assertEquals(bearerData.validityPeriodRelative, 193); assertEquals(bearerData.deferredDeliveryTimeAbsolute.year, 1997); assertEquals(bearerData.deferredDeliveryTimeAbsolute.month, 5); assertEquals(bearerData.deferredDeliveryTimeAbsolute.monthDay, 18); assertEquals(bearerData.deferredDeliveryTimeAbsolute.hour, 0); assertEquals(bearerData.deferredDeliveryTimeAbsolute.minute, 0); assertEquals(bearerData.deferredDeliveryTimeAbsolute.second, 0); - assertEquals(bearerData.deferredDeliveryTimeRelative, -57); + assertEquals(bearerData.deferredDeliveryTimeRelative, 199); assertEquals(bearerData.hasUserDataHeader, false); assertEquals(bearerData.userData.msgEncoding, UserData.ENCODING_7BIT_ASCII); assertEquals(bearerData.userData.numFields, 2); @@ -225,7 +225,7 @@ public class CdmaSmsTest extends AndroidTestCase { assertEquals(bearerData.deferredDeliveryTimeAbsolute.hour, 0); assertEquals(bearerData.deferredDeliveryTimeAbsolute.minute, 0); assertEquals(bearerData.deferredDeliveryTimeAbsolute.second, 0); - assertEquals(bearerData.deferredDeliveryTimeRelative, -110); + assertEquals(bearerData.deferredDeliveryTimeRelative, 146); assertEquals(bearerData.hasUserDataHeader, false); assertEquals(bearerData.userData.msgEncoding, UserData.ENCODING_7BIT_ASCII); assertEquals(bearerData.userData.numFields, 2); |