summaryrefslogtreecommitdiffstats
path: root/src/com/android/providers/contacts/util
diff options
context:
space:
mode:
authorMakoto Onuki <omakoto@google.com>2012-03-23 13:55:37 -0700
committerMakoto Onuki <omakoto@google.com>2012-03-23 14:03:21 -0700
commit81567f4a0f7c9c338506bd82f4d33e83c2ccf159 (patch)
tree79caaabb662456f9ab46fd886dab0d17cba17962 /src/com/android/providers/contacts/util
parentd3256d7ba4ee8376567f91c1c2dec444ad13d542 (diff)
downloadpackages_providers_ContactsProvider-81567f4a0f7c9c338506bd82f4d33e83c2ccf159.zip
packages_providers_ContactsProvider-81567f4a0f7c9c338506bd82f4d33e83c2ccf159.tar.gz
packages_providers_ContactsProvider-81567f4a0f7c9c338506bd82f4d33e83c2ccf159.tar.bz2
Add new package aggregation.util
Move aggregator related classes into it. Change-Id: I712fe07ad2bab1e532e3822e3e2797a199329865
Diffstat (limited to 'src/com/android/providers/contacts/util')
-rw-r--r--src/com/android/providers/contacts/util/Hex.java121
1 files changed, 121 insertions, 0 deletions
diff --git a/src/com/android/providers/contacts/util/Hex.java b/src/com/android/providers/contacts/util/Hex.java
new file mode 100644
index 0000000..ad26f4b
--- /dev/null
+++ b/src/com/android/providers/contacts/util/Hex.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed 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
+ */
+package com.android.providers.contacts.util;
+
+/**
+ * Basic hex operations: from byte array to string and vice versa.
+ *
+ * TODO: move to the framework and consider implementing as native code.
+ */
+public class Hex {
+
+ private static final char[] HEX_DIGITS = new char[]{
+ '0', '1', '2', '3', '4', '5', '6', '7',
+ '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
+ };
+
+ private static final char[] FIRST_CHAR = new char[256];
+ private static final char[] SECOND_CHAR = new char[256];
+ static {
+ for (int i = 0; i < 256; i++) {
+ FIRST_CHAR[i] = HEX_DIGITS[(i >> 4) & 0xF];
+ SECOND_CHAR[i] = HEX_DIGITS[i & 0xF];
+ }
+ }
+
+ private static final byte[] DIGITS = new byte['f'+1];
+ static {
+ for (int i = 0; i <= 'F'; i++) {
+ DIGITS[i] = -1;
+ }
+ for (byte i = 0; i < 10; i++) {
+ DIGITS['0' + i] = i;
+ }
+ for (byte i = 0; i < 6; i++) {
+ DIGITS['A' + i] = (byte)(10 + i);
+ DIGITS['a' + i] = (byte)(10 + i);
+ }
+ }
+
+ /**
+ * Quickly converts a byte array to a hexadecimal string representation.
+ *
+ * @param array byte array, possibly zero-terminated.
+ */
+ public static String encodeHex(byte[] array, boolean zeroTerminated) {
+ char[] cArray = new char[array.length * 2];
+
+ int j = 0;
+ for (int i = 0; i < array.length; i++) {
+ int index = array[i] & 0xFF;
+ if (zeroTerminated && index == 0 && i == array.length-1) {
+ break;
+ }
+
+ cArray[j++] = FIRST_CHAR[index];
+ cArray[j++] = SECOND_CHAR[index];
+ }
+
+ return new String(cArray, 0, j);
+ }
+
+ /**
+ * Quickly converts a hexadecimal string to a byte array.
+ */
+ public static byte[] decodeHex(String hexString) {
+ int length = hexString.length();
+
+ if ((length & 0x01) != 0) {
+ throw new IllegalArgumentException("Odd number of characters.");
+ }
+
+ boolean badHex = false;
+ byte[] out = new byte[length >> 1];
+ for (int i = 0, j = 0; j < length; i++) {
+ int c1 = hexString.charAt(j++);
+ if (c1 > 'f') {
+ badHex = true;
+ break;
+ }
+
+ final byte d1 = DIGITS[c1];
+ if (d1 == -1) {
+ badHex = true;
+ break;
+ }
+
+ int c2 = hexString.charAt(j++);
+ if (c2 > 'f') {
+ badHex = true;
+ break;
+ }
+
+ final byte d2 = DIGITS[c2];
+ if (d2 == -1) {
+ badHex = true;
+ break;
+ }
+
+ out[i] = (byte) (d1 << 4 | d2);
+ }
+
+ if (badHex) {
+ throw new IllegalArgumentException("Invalid hexadecimal digit: " + hexString);
+ }
+
+ return out;
+ }
+}