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

Commit 32ceaa12 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "String16 is moveable (noexcept)" am: 3551e457

Original change: https://android-review.googlesource.com/c/platform/system/core/+/1749261

Change-Id: Ia50fc76500c60ead9386f950aeb2f4369c006730
parents b2a84f79 3551e457
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -96,6 +96,12 @@ String16::String16(const String16& o)
    acquire();
}

String16::String16(String16&& o) noexcept
    : mString(o.mString)
{
    o.mString = getEmptyString();
}

String16::String16(const String16& o, size_t len, size_t begin)
    : mString(getEmptyString())
{
@@ -126,6 +132,13 @@ String16::~String16()
    release();
}

String16& String16::operator=(String16&& other) noexcept {
    release();
    mString = other.mString;
    other.mString = getEmptyString();
    return *this;
}

size_t String16::size() const
{
    if (isStaticString()) {
+19 −2
Original line number Diff line number Diff line
@@ -64,6 +64,13 @@ TEST(String16Test, Move) {
    EXPECT_STR16EQ(u"Verify me", another);
}

TEST(String16Test, MoveAssign) {
    String16 tmp("Verify me");
    String16 another;
    another = std::move(tmp);
    EXPECT_STR16EQ(u"Verify me", another);
}

TEST(String16Test, Size) {
    String16 tmp("Verify me");
    EXPECT_EQ(9U, tmp.size());
@@ -123,6 +130,10 @@ TEST(String16Test, StaticStringMove) {
    String16 another(std::move(tmp));
    EXPECT_STR16EQ(u"Verify me", another);
    EXPECT_TRUE(another.isStaticString());
    // move/copy from StaticString16 is specialized (just copy the handle).
    // no extra actions required.
    EXPECT_STR16EQ(u"Verify me", tmp);
    EXPECT_TRUE(tmp.isStaticString());
}

TEST(String16Test, StaticStringSize) {
@@ -174,10 +185,16 @@ TEST(String16Test, StringSetToStaticString) {
    EXPECT_STR16EQ(u"Verify me", another);
}

TEST(String16Test, StringMoveFromStaticString) {
TEST(String16Test, StringMoveAssignFromStaticString) {
    StaticString16 tmp(u"Verify me");
    String16 another(std::move(tmp));
    String16 another(u"nonstatic");
    another = std::move(tmp);
    EXPECT_STR16EQ(u"Verify me", another);
    EXPECT_TRUE(another.isStaticString());
    // move/copy from StaticString16 is specialized (just copy handle).
    // no extra actions required.
    EXPECT_STR16EQ(u"Verify me", tmp);
    EXPECT_TRUE(tmp.isStaticString());
}

TEST(String16Test, EmptyStringIsStatic) {
+8 −0
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ class String16
public:
                                String16();
                                String16(const String16& o);
                                String16(String16&& o) noexcept;
                                String16(const String16& o,
                                         size_t len,
                                         size_t begin=0);
@@ -69,6 +70,7 @@ public:
            status_t            append(const char16_t* other, size_t len);

    inline  String16&           operator=(const String16& other);
            String16&           operator=(String16&& other) noexcept;

    inline  String16&           operator+=(const String16& other);
    inline  String16            operator+(const String16& other) const;
@@ -176,6 +178,12 @@ protected:
public:
    template <size_t N>
    explicit constexpr String16(const StaticString16<N>& s) : mString(s.mString) {}
    template <size_t N>
    constexpr String16& operator=(const StaticString16<N>& s) {
        release();
        mString = s.mString;
        return *this;
    }
};

// String16 can be trivially moved using memcpy() because moving does not