forked from qt-creator/qt-creator
Utils: Modernize SmallString
Use more C++ api and constexpr. With C++ 17 we can use even more. Change-Id: I33934cd7e087c311bf98501442df848bdb108279 Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
@@ -32,123 +32,94 @@ namespace Utils {
|
||||
|
||||
namespace Internal {
|
||||
|
||||
template <class Category,
|
||||
class Type,
|
||||
typename DistanceType = ptrdiff_t,
|
||||
typename Pointer = Type*,
|
||||
typename Reference = Type&>
|
||||
struct SmallStringIterator : public std::iterator<Category, Type, DistanceType, Pointer, Reference>
|
||||
template<class Category,
|
||||
class Type,
|
||||
typename DistanceType = ptrdiff_t,
|
||||
typename Pointer = Type *,
|
||||
typename Reference = Type &>
|
||||
struct SmallStringIterator
|
||||
{
|
||||
constexpr
|
||||
SmallStringIterator() noexcept = default;
|
||||
using iterator_category = Category;
|
||||
using value_type = Type;
|
||||
using difference_type = DistanceType;
|
||||
using pointer = Pointer;
|
||||
using reference = Reference;
|
||||
|
||||
constexpr
|
||||
SmallStringIterator(Pointer ptr) noexcept : pointer_(ptr)
|
||||
{
|
||||
}
|
||||
constexpr SmallStringIterator() noexcept = default;
|
||||
|
||||
SmallStringIterator operator++() noexcept
|
||||
{
|
||||
return ++pointer_;
|
||||
}
|
||||
constexpr SmallStringIterator(Pointer ptr) noexcept
|
||||
: pointer_(ptr)
|
||||
{}
|
||||
|
||||
SmallStringIterator operator++(int) noexcept
|
||||
{
|
||||
return pointer_++;
|
||||
}
|
||||
constexpr SmallStringIterator operator++() noexcept { return ++pointer_; }
|
||||
|
||||
SmallStringIterator operator--() noexcept
|
||||
{
|
||||
return --pointer_;
|
||||
}
|
||||
constexpr SmallStringIterator operator++(int) noexcept { return pointer_++; }
|
||||
|
||||
SmallStringIterator operator--(int) noexcept
|
||||
{
|
||||
return pointer_--;
|
||||
}
|
||||
constexpr SmallStringIterator operator--() noexcept { return --pointer_; }
|
||||
|
||||
SmallStringIterator operator+(DistanceType difference) const noexcept
|
||||
constexpr SmallStringIterator operator--(int) noexcept { return pointer_--; }
|
||||
|
||||
constexpr SmallStringIterator operator+(DistanceType difference) const noexcept
|
||||
{
|
||||
return pointer_ + difference;
|
||||
}
|
||||
|
||||
SmallStringIterator operator-(DistanceType difference) const noexcept
|
||||
constexpr SmallStringIterator operator-(DistanceType difference) const noexcept
|
||||
{
|
||||
return pointer_ - difference;
|
||||
}
|
||||
|
||||
SmallStringIterator operator+(std::size_t difference) const noexcept
|
||||
constexpr SmallStringIterator operator+(std::size_t difference) const noexcept
|
||||
{
|
||||
return pointer_ + difference;
|
||||
}
|
||||
|
||||
SmallStringIterator operator-(std::size_t difference) const noexcept
|
||||
constexpr SmallStringIterator operator-(std::size_t difference) const noexcept
|
||||
{
|
||||
return pointer_ - difference;
|
||||
}
|
||||
|
||||
DistanceType operator-(SmallStringIterator other) const noexcept
|
||||
constexpr DistanceType operator-(SmallStringIterator other) const noexcept
|
||||
{
|
||||
return pointer_ - other.data();
|
||||
}
|
||||
|
||||
SmallStringIterator operator+=(DistanceType difference) noexcept
|
||||
constexpr SmallStringIterator operator+=(DistanceType difference) noexcept
|
||||
{
|
||||
return pointer_ += difference;
|
||||
}
|
||||
|
||||
SmallStringIterator operator-=(DistanceType difference) noexcept
|
||||
constexpr SmallStringIterator operator-=(DistanceType difference) noexcept
|
||||
{
|
||||
return pointer_ -= difference;
|
||||
}
|
||||
|
||||
Reference operator*() noexcept
|
||||
{
|
||||
return *pointer_;
|
||||
}
|
||||
constexpr Reference operator*() noexcept { return *pointer_; }
|
||||
|
||||
const Reference operator*() const noexcept
|
||||
{
|
||||
return *pointer_;
|
||||
}
|
||||
const Reference operator*() const noexcept { return *pointer_; }
|
||||
|
||||
Pointer operator->() noexcept
|
||||
{
|
||||
return pointer_;
|
||||
}
|
||||
constexpr Pointer operator->() noexcept { return pointer_; }
|
||||
|
||||
const Pointer operator->() const noexcept
|
||||
{
|
||||
return pointer_;
|
||||
}
|
||||
constexpr const Pointer operator->() const noexcept { return pointer_; }
|
||||
|
||||
constexpr
|
||||
bool operator==(SmallStringIterator other) const noexcept
|
||||
constexpr bool operator==(SmallStringIterator other) const noexcept
|
||||
{
|
||||
return pointer_ == other.pointer_;
|
||||
}
|
||||
|
||||
constexpr
|
||||
bool operator!=(SmallStringIterator other) const noexcept
|
||||
constexpr bool operator!=(SmallStringIterator other) const noexcept
|
||||
{
|
||||
return pointer_ != other.pointer_;
|
||||
}
|
||||
|
||||
constexpr
|
||||
bool operator<(SmallStringIterator other) const noexcept
|
||||
constexpr bool operator<(SmallStringIterator other) const noexcept
|
||||
{
|
||||
return pointer_ < other.pointer_;
|
||||
}
|
||||
|
||||
Pointer data() noexcept
|
||||
{
|
||||
return pointer_;
|
||||
}
|
||||
constexpr Pointer data() noexcept { return pointer_; }
|
||||
|
||||
const Pointer data() const noexcept
|
||||
{
|
||||
return pointer_;
|
||||
}
|
||||
constexpr const Pointer data() const noexcept { return pointer_; }
|
||||
|
||||
private:
|
||||
Pointer pointer_ = nullptr;
|
||||
|
||||
Reference in New Issue
Block a user