[ox/std] Add begin and end methods to BasicString

This commit is contained in:
2021-08-03 00:41:03 -05:00
parent 38596ac941
commit 853f8c25ea
2 changed files with 75 additions and 29 deletions

View File

@ -102,15 +102,15 @@ class Vector: detail::SmallVector<T, SmallVectorSize> {
using value_type = T;
using size_type = std::size_t;
template<typename RefType, bool reverse = false>
template<typename RefType = T&, typename PtrType = T*, bool reverse = false>
struct iterator: public std::iterator<std::bidirectional_iterator_tag, T> {
private:
T *m_t = nullptr;
PtrType m_t = nullptr;
size_type m_offset = 0;
size_type m_max = 0;
public:
constexpr iterator(T *t, size_type offset, size_type max) {
constexpr iterator(PtrType t, size_type offset, size_type max) {
m_t = t;
m_offset = offset;
m_max = max;
@ -223,36 +223,36 @@ class Vector: detail::SmallVector<T, SmallVectorSize> {
~Vector();
constexpr iterator<T&> begin() const noexcept {
return iterator<T&>(m_items, 0, m_size);
constexpr iterator<> begin() const noexcept {
return iterator<>(m_items, 0, m_size);
}
constexpr iterator<T&> end() const noexcept {
return iterator<T&>(m_items, m_size, m_size);
constexpr iterator<> end() const noexcept {
return iterator<>(m_items, m_size, m_size);
}
constexpr iterator<const T&> cbegin() const noexcept {
return iterator<const T&>(m_items, 0, m_size);
constexpr iterator<const T&, const T*> cbegin() const noexcept {
return iterator<const T&, const T*>(m_items, 0, m_size);
}
constexpr iterator<const T&> cend() const noexcept {
return iterator<const T&>(m_items, m_size, m_size);
constexpr iterator<const T&, const T*> cend() const noexcept {
return iterator<const T&, const T*>(m_items, m_size, m_size);
}
constexpr iterator<T&, true> rbegin() const noexcept {
return iterator<T&, true>(m_items, 0, m_size);
constexpr iterator<T&, T*, true> rbegin() const noexcept {
return iterator<T&, T*, true>(m_items, m_size, m_size);
}
constexpr iterator<T&, true> rend() const noexcept {
return iterator<T&, true>(m_items, m_size, m_size);
constexpr iterator<T&, T*, true> rend() const noexcept {
return iterator<T&, T*, true>(m_items, 0, m_size);
}
constexpr iterator<const T&, true> crbegin() const noexcept {
return iterator<const T&, true>(m_items, 0, m_size);
constexpr iterator<const T&, const T*, true> crbegin() const noexcept {
return iterator<const T&, const T*, true>(m_items, m_size, m_size);
}
constexpr iterator<const T&, true> crend() const noexcept {
return iterator<const T&, true>(m_items, m_size, m_size);
constexpr iterator<const T&, const T*, true> crend() const noexcept {
return iterator<const T&, const T*, true>(m_items, 0, m_size);
}
bool operator==(const Vector &other) const;
@ -310,8 +310,8 @@ class Vector: detail::SmallVector<T, SmallVectorSize> {
* @param pos iterator at the point to remove
* @return Error if index is out of bounds
*/
template<typename RefType, bool reverse>
Error erase(const iterator<RefType, reverse> &pos);
template<typename RefType, typename RefPtr, bool reverse>
Error erase(const iterator<RefType, RefPtr, reverse> &pos);
/**
* Removes an item from the Vector.
@ -564,8 +564,8 @@ void Vector<T, SmallVectorSize>::pop_back() {
}
template<typename T, std::size_t SmallVectorSize>
template<typename RefType, bool reverse>
Error Vector<T, SmallVectorSize>::erase(const iterator<RefType, reverse> &pos) {
template<typename RefType, typename RefPtr, bool reverse>
Error Vector<T, SmallVectorSize>::erase(const iterator<RefType, RefPtr, reverse> &pos) {
return erase(pos.offset());
}