diff --git a/native/jni/NativeFileList.mk b/native/jni/NativeFileList.mk
index ef6f3d6..0977749 100644
--- a/native/jni/NativeFileList.mk
+++ b/native/jni/NativeFileList.mk
@@ -127,4 +127,5 @@
     suggest/core/dictionary/bloom_filter_test.cpp \
     suggest/policyimpl/dictionary/utils/buffer_with_extendable_buffer_test.cpp \
     suggest/policyimpl/dictionary/utils/trie_map_test.cpp \
-    utils/autocorrection_threshold_utils_test.cpp
+    utils/autocorrection_threshold_utils_test.cpp \
+    utils/int_array_view_test.cpp
diff --git a/native/jni/src/utils/byte_array_view.h b/native/jni/src/utils/byte_array_view.h
new file mode 100644
index 0000000..d13999c
--- /dev/null
+++ b/native/jni/src/utils/byte_array_view.h
@@ -0,0 +1,82 @@
+/*
+ * 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.
+ */
+
+#ifndef LATINIME_BYTE_ARRAY_VIEW_H
+#define LATINIME_BYTE_ARRAY_VIEW_H
+
+#include <cstdint>
+#include <cstdlib>
+
+#include "defines.h"
+
+namespace latinime {
+
+/**
+ * Helper class used to keep track of read accesses for a given memory region.
+ */
+class ReadOnlyByteArrayView {
+ public:
+    ReadOnlyByteArrayView() : mPtr(nullptr), mSize(0) {}
+
+    ReadOnlyByteArrayView(const uint8_t *const ptr, const size_t size)
+            : mPtr(ptr), mSize(size) {}
+
+    AK_FORCE_INLINE size_t size() const {
+        return mSize;
+    }
+
+    AK_FORCE_INLINE const uint8_t *data() const {
+        return mPtr;
+    }
+
+ private:
+    DISALLOW_ASSIGNMENT_OPERATOR(ReadOnlyByteArrayView);
+
+    const uint8_t *const mPtr;
+    const size_t mSize;
+};
+
+/**
+ * Helper class used to keep track of read-write accesses for a given memory region.
+ */
+class ReadWriteByteArrayView {
+ public:
+    ReadWriteByteArrayView() : mPtr(nullptr), mSize(0) {}
+
+    ReadWriteByteArrayView(uint8_t *const ptr, const size_t size)
+            : mPtr(ptr), mSize(size) {}
+
+    AK_FORCE_INLINE size_t size() const {
+        return mSize;
+    }
+
+    AK_FORCE_INLINE uint8_t *data() const {
+        return mPtr;
+    }
+
+    AK_FORCE_INLINE ReadOnlyByteArrayView getReadOnlyView() const {
+        return ReadOnlyByteArrayView(mPtr, mSize);
+    }
+
+ private:
+    DISALLOW_ASSIGNMENT_OPERATOR(ReadWriteByteArrayView);
+
+    uint8_t *const mPtr;
+    const size_t mSize;
+};
+
+} // namespace latinime
+#endif // LATINIME_BYTE_ARRAY_VIEW_H
diff --git a/native/jni/src/utils/int_array_view.h b/native/jni/src/utils/int_array_view.h
new file mode 100644
index 0000000..3ff01f5
--- /dev/null
+++ b/native/jni/src/utils/int_array_view.h
@@ -0,0 +1,80 @@
+/*
+ * 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.
+ */
+
+#ifndef LATINIME_INT_ARRAY_VIEW_H
+#define LATINIME_INT_ARRAY_VIEW_H
+
+#include <cstdint>
+#include <cstdlib>
+#include <vector>
+
+#include "defines.h"
+
+namespace latinime {
+
+/**
+ * Helper class used to provide a read-only view of a given range of integer array. This class
+ * does not take ownership of the underlying integer array but is designed to be a lightweight
+ * object that obeys value semantics.
+ *
+ * Example:
+ * <code>
+ * bool constinsX(IntArrayView view) {
+ *     for (size_t i = 0; i < view.size(); ++i) {
+ *         if (view[i] == 'X') {
+ *             return true;
+ *         }
+ *     }
+ *     return false;
+ * }
+ *
+ * const int codePointArray[] = { 'A', 'B', 'X', 'Z' };
+ * auto view = IntArrayView(codePointArray, NELEMS(codePointArray));
+ * const bool hasX = constinsX(view);
+ * </code>
+ */
+class IntArrayView {
+ public:
+    IntArrayView() : mPtr(nullptr), mSize(0) {}
+
+    IntArrayView(const int *const ptr, const size_t size)
+            : mPtr(ptr), mSize(size) {}
+
+    explicit IntArrayView(const std::vector<int> &vector)
+            : mPtr(vector.data()), mSize(vector.size()) {}
+
+    AK_FORCE_INLINE int operator[](const size_t index) const {
+        ASSERT(index < mSize);
+        return mPtr[index];
+    }
+
+    AK_FORCE_INLINE size_t size() const {
+        return mSize;
+    }
+
+    AK_FORCE_INLINE const int *data() const {
+        return mPtr;
+    }
+
+ private:
+    DISALLOW_ASSIGNMENT_OPERATOR(IntArrayView);
+
+    const int *const mPtr;
+    const size_t mSize;
+};
+
+} // namespace latinime
+#endif // LATINIME_MEMORY_VIEW_H
diff --git a/native/jni/tests/utils/int_array_view_test.cpp b/native/jni/tests/utils/int_array_view_test.cpp
new file mode 100644
index 0000000..9aa8cdc
--- /dev/null
+++ b/native/jni/tests/utils/int_array_view_test.cpp
@@ -0,0 +1,38 @@
+/*
+ * 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 "utils/int_array_view.h"
+
+#include <gtest/gtest.h>
+
+#include <vector>
+
+namespace latinime {
+namespace {
+
+TEST(MemoryViewTest, TestAccess) {
+    static const int DATA_SIZE = 10000;
+
+    std::vector<int> intVector = {3, 2, 1, 0, -1, -2};
+    IntArrayView intArrayView(intVector);
+    EXPECT_EQ(intVector.size(), intArrayView.size());
+    for (int i = 0; i < DATA_SIZE; ++i) {
+        EXPECT_EQ(intVector[i], intArrayView[i]);
+    }
+}
+
+}  // namespace
+}  // namespace latinime
