diff options
author | 2014-04-09 06:59:00 +0000 | |
---|---|---|
committer | 2014-04-09 06:59:00 +0000 | |
commit | e6a69f53b0053ee59e4b57a2d1d0e0fc49fe6a0d (patch) | |
tree | 8a7e86fb287b1e0598718a2d30fd3370fa3309fb /native | |
parent | 8d49064832937dd7215a9227a1fc34dc3de92791 (diff) | |
parent | bbefa8c8265820f5f9aeb0e2a49a4526d7cdd682 (diff) | |
download | latinime-e6a69f53b0053ee59e4b57a2d1d0e0fc49fe6a0d.tar.gz latinime-e6a69f53b0053ee59e4b57a2d1d0e0fc49fe6a0d.tar.xz latinime-e6a69f53b0053ee59e4b57a2d1d0e0fc49fe6a0d.zip |
am bbefa8c8: Merge "Make NELEMS type-safe"
* commit 'bbefa8c8265820f5f9aeb0e2a49a4526d7cdd682':
Make NELEMS type-safe
Diffstat (limited to 'native')
-rw-r--r-- | native/jni/NativeFileList.mk | 1 | ||||
-rw-r--r-- | native/jni/src/defines.h | 8 | ||||
-rw-r--r-- | native/jni/tests/defines_test.cpp | 34 |
3 files changed, 42 insertions, 1 deletions
diff --git a/native/jni/NativeFileList.mk b/native/jni/NativeFileList.mk index 1031903f8..ce3975265 100644 --- a/native/jni/NativeFileList.mk +++ b/native/jni/NativeFileList.mk @@ -101,4 +101,5 @@ LATIN_IME_CORE_SRC_FILES := \ time_keeper.cpp) LATIN_IME_CORE_TEST_FILES := \ + defines_test.cpp \ utils/autocorrection_threshold_utils_test.cpp diff --git a/native/jni/src/defines.h b/native/jni/src/defines.h index 1719b1c60..3becc79e8 100644 --- a/native/jni/src/defines.h +++ b/native/jni/src/defines.h @@ -35,7 +35,13 @@ // Must be equal to ProximityInfo.MAX_PROXIMITY_CHARS_SIZE in Java #define MAX_PROXIMITY_CHARS_SIZE 16 #define ADDITIONAL_PROXIMITY_CHAR_DELIMITER_CODE 2 -#define NELEMS(x) (sizeof(x) / sizeof((x)[0])) + +// TODO: Use size_t instead of int. +// Disclaimer: You will see a compile error if you use this macro against a variable-length array. +// Sorry for the inconvenience. It isn't supported. +template <typename T, int N> +char (&ArraySizeHelper(T (&array)[N]))[N]; +#define NELEMS(x) (sizeof(ArraySizeHelper(x))) AK_FORCE_INLINE static int intArrayToCharArray(const int *const source, const int sourceSize, char *dest, const int destSize) { diff --git a/native/jni/tests/defines_test.cpp b/native/jni/tests/defines_test.cpp new file mode 100644 index 000000000..f7b80b2b5 --- /dev/null +++ b/native/jni/tests/defines_test.cpp @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2014 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. + */ + +#include "defines.h" + +#include <gtest/gtest.h> + +namespace latinime { +namespace { + +TEST(DefinesTest, NELEMSForFixedLengthArray) { + const size_t SMALL_ARRAY_SIZE = 1; + const size_t LARGE_ARRAY_SIZE = 100; + int smallArray[SMALL_ARRAY_SIZE]; + int largeArray[LARGE_ARRAY_SIZE]; + EXPECT_EQ(SMALL_ARRAY_SIZE, NELEMS(smallArray)); + EXPECT_EQ(LARGE_ARRAY_SIZE, NELEMS(largeArray)); +} + +} // namespace +} // namespace latinime |