Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eff9be9c authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi Committed by Android (Google) Code Review
Browse files

Merge "Implement IntArrayView.copyToBuffer()."

parents 22bf1711 a3b0eb16
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -17,8 +17,9 @@
#ifndef LATINIME_INT_ARRAY_VIEW_H
#define LATINIME_INT_ARRAY_VIEW_H

#include <array>
#include <cstdint>
#include <cstdlib>
#include <cstring>
#include <vector>

#include "defines.h"
@@ -103,6 +104,12 @@ class IntArrayView {
        return IntArrayView(mPtr + n, mSize - n);
    }

    template <size_t N>
    void copyToArray(std::array<int, N> *const buffer, const size_t offset) const {
        ASSERT(mSize + offset <= N);
        memmove(buffer->data() + offset, mPtr, sizeof(int) * mSize);
    }

 private:
    DISALLOW_ASSIGNMENT_OPERATOR(IntArrayView);

+22 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@

#include <gtest/gtest.h>

#include <array>
#include <vector>

namespace latinime {
@@ -89,5 +90,26 @@ TEST(IntArrayViewTest, TestSkip) {
    }
}

TEST(IntArrayViewTest, TestCopyToArray) {
    // "{{" to suppress warning.
    std::array<int, 7> buffer = {{10, 20, 30, 40, 50, 60, 70}};
    const std::vector<int> intVector = {3, 2, 1, 0, -1, -2};
    IntArrayView intArrayView(intVector);
    intArrayView.limit(0).copyToArray(&buffer, 0);
    EXPECT_EQ(10, buffer[0]);
    EXPECT_EQ(20, buffer[1]);
    intArrayView.limit(1).copyToArray(&buffer, 0);
    EXPECT_EQ(intVector[0], buffer[0]);
    EXPECT_EQ(20, buffer[1]);
    intArrayView.limit(1).copyToArray(&buffer, 1);
    EXPECT_EQ(intVector[0], buffer[0]);
    EXPECT_EQ(intVector[0], buffer[1]);
    intArrayView.copyToArray(&buffer, 0);
    for (size_t i = 0; i < intArrayView.size(); ++i) {
        EXPECT_EQ(intVector[i], buffer[i]);
    }
    EXPECT_EQ(70, buffer[6]);
}

}  // namespace
}  // namespace latinime