elide temporary string in comphelper::strip
Change-Id: I093768c617490679d295cce37cc3ffe67c8e940a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135871 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
This commit is contained in:
parent
8611bf0202
commit
bfb0aa8ca3
1 changed files with 55 additions and 8 deletions
|
@ -161,28 +161,75 @@ std::u16string_view stripEnd(std::u16string_view rIn, sal_Unicode c)
|
||||||
return tmpl_stripEnd<std::u16string_view, sal_Unicode>(rIn, c);
|
return tmpl_stripEnd<std::u16string_view, sal_Unicode>(rIn, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
template <typename T, typename C> T tmpl_strip(const T &rIn,
|
||||||
|
const C cRemove)
|
||||||
|
{
|
||||||
|
if (rIn.empty())
|
||||||
|
return rIn;
|
||||||
|
|
||||||
|
typename T::size_type end = rIn.size();
|
||||||
|
while (end > 0)
|
||||||
|
{
|
||||||
|
if (rIn[end-1] != cRemove)
|
||||||
|
break;
|
||||||
|
--end;
|
||||||
|
}
|
||||||
|
|
||||||
|
typename T::size_type start = 0;
|
||||||
|
while (start < end)
|
||||||
|
{
|
||||||
|
if (rIn[start] != cRemove)
|
||||||
|
break;
|
||||||
|
++start;
|
||||||
|
}
|
||||||
|
|
||||||
|
return rIn.substr(start, end - start);
|
||||||
|
}
|
||||||
|
template <typename T, typename C> T tmpl_stripString(const T &rIn,
|
||||||
|
const C cRemove)
|
||||||
|
{
|
||||||
|
if (rIn.isEmpty())
|
||||||
|
return rIn;
|
||||||
|
|
||||||
|
sal_Int32 end = rIn.getLength();
|
||||||
|
while (end > 0)
|
||||||
|
{
|
||||||
|
if (rIn[end-1] != cRemove)
|
||||||
|
break;
|
||||||
|
--end;
|
||||||
|
}
|
||||||
|
sal_Int32 start = 0;
|
||||||
|
while (start < end)
|
||||||
|
{
|
||||||
|
if (rIn[start] != cRemove)
|
||||||
|
break;
|
||||||
|
++start;
|
||||||
|
}
|
||||||
|
|
||||||
|
return rIn.copy(start, end - start);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
OString strip(const OString& rIn, char c)
|
OString strip(const OString& rIn, char c)
|
||||||
{
|
{
|
||||||
auto x = tmpl_stripStartString<OString, char>(rIn, c);
|
return tmpl_stripString<OString, char>(rIn, c);
|
||||||
return stripEnd(x, c);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string_view strip(std::string_view rIn, char c)
|
std::string_view strip(std::string_view rIn, char c)
|
||||||
{
|
{
|
||||||
auto x = tmpl_stripStart<std::string_view, char>(rIn, c);
|
return tmpl_strip<std::string_view, char>(rIn, c);
|
||||||
return stripEnd(x, c);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
OUString strip(const OUString& rIn, sal_Unicode c)
|
OUString strip(const OUString& rIn, sal_Unicode c)
|
||||||
{
|
{
|
||||||
auto x = tmpl_stripStartString<OUString, sal_Unicode>(rIn, c);
|
return tmpl_stripString<OUString, sal_Unicode>(rIn, c);
|
||||||
return stripEnd(x, c);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::u16string_view strip(std::u16string_view rIn, sal_Unicode c)
|
std::u16string_view strip(std::u16string_view rIn, sal_Unicode c)
|
||||||
{
|
{
|
||||||
auto x = tmpl_stripStart<std::u16string_view, sal_Unicode>(rIn, c);
|
return tmpl_strip<std::u16string_view, sal_Unicode>(rIn, c);
|
||||||
return stripEnd(x, c);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
|
|
Loading…
Reference in a new issue