mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-04-01 12:03:08 +00:00
Bug 1602452 - Make member functions of nsTStringRepr defined in header constexpr. r=froydnj
Differential Revision: https://phabricator.services.mozilla.com/D56369 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
d4090928eb
commit
50cf008dd3
@ -124,8 +124,8 @@ class nsTStringRepr {
|
||||
typedef StringClassFlags ClassFlags;
|
||||
|
||||
// Reading iterators.
|
||||
const_char_iterator BeginReading() const { return mData; }
|
||||
const_char_iterator EndReading() const { return mData + mLength; }
|
||||
constexpr const_char_iterator BeginReading() const { return mData; }
|
||||
constexpr const_char_iterator EndReading() const { return mData + mLength; }
|
||||
|
||||
// Deprecated reading iterators.
|
||||
const_iterator& BeginReading(const_iterator& aIter) const {
|
||||
@ -163,26 +163,32 @@ class nsTStringRepr {
|
||||
#endif
|
||||
|
||||
// Returns pointer to string data (not necessarily null-terminated)
|
||||
const typename raw_type<T, int>::type Data() const { return mData; }
|
||||
constexpr const typename raw_type<T, int>::type Data() const { return mData; }
|
||||
|
||||
size_type Length() const { return mLength; }
|
||||
constexpr size_type Length() const { return mLength; }
|
||||
|
||||
DataFlags GetDataFlags() const { return mDataFlags; }
|
||||
constexpr DataFlags GetDataFlags() const { return mDataFlags; }
|
||||
|
||||
bool IsEmpty() const { return mLength == 0; }
|
||||
constexpr bool IsEmpty() const { return mLength == 0; }
|
||||
|
||||
bool IsLiteral() const { return !!(mDataFlags & DataFlags::LITERAL); }
|
||||
constexpr bool IsLiteral() const {
|
||||
return !!(mDataFlags & DataFlags::LITERAL);
|
||||
}
|
||||
|
||||
bool IsVoid() const { return !!(mDataFlags & DataFlags::VOIDED); }
|
||||
constexpr bool IsVoid() const { return !!(mDataFlags & DataFlags::VOIDED); }
|
||||
|
||||
bool IsTerminated() const { return !!(mDataFlags & DataFlags::TERMINATED); }
|
||||
constexpr bool IsTerminated() const {
|
||||
return !!(mDataFlags & DataFlags::TERMINATED);
|
||||
}
|
||||
|
||||
char_type CharAt(index_type aIndex) const {
|
||||
constexpr char_type CharAt(index_type aIndex) const {
|
||||
NS_ASSERTION(aIndex < mLength, "index exceeds allowable range");
|
||||
return mData[aIndex];
|
||||
}
|
||||
|
||||
char_type operator[](index_type aIndex) const { return CharAt(aIndex); }
|
||||
constexpr char_type operator[](index_type aIndex) const {
|
||||
return CharAt(aIndex);
|
||||
}
|
||||
|
||||
char_type First() const;
|
||||
|
||||
@ -347,14 +353,15 @@ Compare(const mozilla::detail::nsTStringRepr<T>& aLhs,
|
||||
const nsTStringComparator<T>& = nsTDefaultStringComparator<T>());
|
||||
|
||||
template <typename T>
|
||||
inline bool operator!=(const mozilla::detail::nsTStringRepr<T>& aLhs,
|
||||
const mozilla::detail::nsTStringRepr<T>& aRhs) {
|
||||
inline constexpr bool operator!=(
|
||||
const mozilla::detail::nsTStringRepr<T>& aLhs,
|
||||
const mozilla::detail::nsTStringRepr<T>& aRhs) {
|
||||
return !aLhs.Equals(aRhs);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline bool operator!=(const mozilla::detail::nsTStringRepr<T>& aLhs,
|
||||
const T* aRhs) {
|
||||
inline constexpr bool operator!=(const mozilla::detail::nsTStringRepr<T>& aLhs,
|
||||
const T* aRhs) {
|
||||
return !aLhs.Equals(aRhs);
|
||||
}
|
||||
|
||||
|
@ -2446,6 +2446,25 @@ CONVERSION_BENCH(PerfUTF8toUTF16VIHundred, CopyUTF8toUTF16, mViHundredUtf8,
|
||||
CONVERSION_BENCH(PerfUTF8toUTF16VIThousand, CopyUTF8toUTF16, mViThousandUtf8,
|
||||
nsAutoString);
|
||||
|
||||
// Tests for usability of nsTLiteralString in constant expressions.
|
||||
static_assert(NS_LITERAL_STRING("").IsEmpty());
|
||||
|
||||
constexpr auto testStringA = NS_LITERAL_STRING("a");
|
||||
static_assert(!testStringA.IsEmpty());
|
||||
static_assert(!testStringA.IsVoid());
|
||||
static_assert(testStringA.IsLiteral());
|
||||
static_assert(testStringA.IsTerminated());
|
||||
static_assert(testStringA.GetDataFlags() ==
|
||||
(nsLiteralString::DataFlags::LITERAL |
|
||||
nsLiteralString::DataFlags::TERMINATED));
|
||||
static_assert(*testStringA.Data() == 'a');
|
||||
static_assert(1 == testStringA.Length());
|
||||
static_assert(testStringA.CharAt(0) == 'a');
|
||||
static_assert(testStringA[0] == 'a');
|
||||
static_assert(*testStringA.BeginReading() == 'a');
|
||||
static_assert(*testStringA.EndReading() == 0);
|
||||
static_assert(testStringA.EndReading() - testStringA.BeginReading() == 1);
|
||||
|
||||
} // namespace TestStrings
|
||||
|
||||
#if defined(__clang__) && (__clang_major__ >= 6)
|
||||
|
Loading…
x
Reference in New Issue
Block a user