diff options
author | Keith Packard <keithp@keithp.com> | 2014-08-17 20:53:31 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2014-08-17 20:53:31 -0700 |
commit | ef1dd370564b99da033109f2fb5f7bf29711a13f (patch) | |
tree | 955ceba539137284f7293edd98b45b6e5714abc3 | |
parent | ee9f68ec877e3e5a67179f8c8abafbccc80eb804 (diff) |
altoslib: Improve performance of AltosLib.hexbytes
On an android device, this function was spending quite a bit of time
calling hexbyte. Open code the conversion to improve performance.
Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r-- | altoslib/AltosLib.java | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/altoslib/AltosLib.java b/altoslib/AltosLib.java index 68bdd17f..c3c1226e 100644 --- a/altoslib/AltosLib.java +++ b/altoslib/AltosLib.java @@ -329,7 +329,7 @@ public class AltosLib { return false; } - public static boolean ishex(int c) { + public static final boolean ishex(int c) { if ('0' <= c && c <= '9') return true; if ('a' <= c && c <= 'f') @@ -339,7 +339,7 @@ public class AltosLib { return false; } - public static boolean ishex(String s) { + public static final boolean ishex(String s) { for (int i = 0; i < s.length(); i++) if (!ishex(s.charAt(i))) return false; @@ -463,10 +463,17 @@ public class AltosLib { if ((s.length() & 1) != 0) throw new NumberFormatException(String.format("invalid line \"%s\"", s)); - n = s.length() / 2; + byte[] bytes = s.getBytes(unicode_set); + n = bytes.length / 2; r = new int[n]; - for (i = 0; i < n; i++) - r[i] = hexbyte(s, i * 2); + for (i = 0; i < n; i++) { + int h = fromhex(bytes[(i << 1)]); + int l = fromhex(bytes[(i << 1) + 1]); + if (h < 0 || l < 0) + throw new NumberFormatException(String.format("invalid hex \"%c%c\"", + bytes[(i<<1)], bytes[(i<<1) + 1])); + r[i] = (h << 4) + l; + } return r; } |