diff --git a/src/libs/utils/smallstring.h b/src/libs/utils/smallstring.h index 6efe575e377..3d39366b87f 100644 --- a/src/libs/utils/smallstring.h +++ b/src/libs/utils/smallstring.h @@ -127,6 +127,16 @@ public: : SmallString(SmallString::fromQString(qString)) {} + template::value>::type + > + SmallString(BeginIterator begin, EndIterator end) + : SmallString(&(*begin), size_type(end - begin)) + { + } + + ~SmallString() noexcept { if (Q_UNLIKELY(hasAllocatedMemory())) diff --git a/tests/unit/unittest/smallstringtest.cpp b/tests/unit/unittest/smallstringtest.cpp index cbdcf1cdac5..0e70dac0478 100644 --- a/tests/unit/unittest/smallstringtest.cpp +++ b/tests/unit/unittest/smallstringtest.cpp @@ -80,6 +80,33 @@ TEST(SmallString, ShortSmallStringIsShortSmallString) #endif } +TEST(SmallString, CreateFromCStringIterators) +{ + char sourceText[] = "this is very very very very very much text"; + + SmallString text(sourceText, &sourceText[sizeof(sourceText) - 1]); + + ASSERT_THAT(text, SmallString("this is very very very very very much text")); +} + +TEST(SmallString, CreateFromQByteArrayIterators) +{ + QByteArray sourceText = "this is very very very very very much text"; + + SmallString text(sourceText.begin(), sourceText.end()); + + ASSERT_THAT(text, SmallString("this is very very very very very much text")); +} + +TEST(SmallString, CreateFromSmallStringIterators) +{ + SmallString sourceText = "this is very very very very very much text"; + + SmallString text(sourceText.begin(), sourceText.end()); + + ASSERT_THAT(text, SmallString("this is very very very very very much text")); +} + TEST(SmallString, ShortSmallStringIsReference) { SmallString longText("very very very very very long text");