From 8a914a66e864ed5a1c787d5365b7eb36ddae6071 Mon Sep 17 00:00:00 2001 From: Keisuke Kuroynagi Date: Fri, 21 Jun 2013 12:58:18 +0900 Subject: [PATCH] Add ByteArrayUtils::readSignedInt24andAdvancePosition to read dynamic dictionaries. Bug: 6669677 Change-Id: I75eeedbb50868432f6a7ff5fa63624d03e788356 --- .../src/suggest/core/dictionary/byte_array_utils.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/native/jni/src/suggest/core/dictionary/byte_array_utils.h b/native/jni/src/suggest/core/dictionary/byte_array_utils.h index d3321f624..daa822ffa 100644 --- a/native/jni/src/suggest/core/dictionary/byte_array_utils.h +++ b/native/jni/src/suggest/core/dictionary/byte_array_utils.h @@ -57,6 +57,17 @@ class ByteArrayUtils { return value; } + static AK_FORCE_INLINE int readSint24andAdvancePosition( + const uint8_t *const buffer, int *const pos) { + const uint8_t value = readUint8(buffer, *pos); + if (value < 0x80) { + return readUint24andAdvancePosition(buffer, pos); + } else { + (*pos)++; + return -(((value & 0x7F) << 16) ^ readUint16andAdvancePosition(buffer, pos)); + } + } + static AK_FORCE_INLINE uint32_t readUint24andAdvancePosition( const uint8_t *const buffer, int *const pos) { const uint32_t value = readUint24(buffer, *pos);