[ox/std] Add begin and end methods to BasicString
This commit is contained in:
parent
38596ac941
commit
853f8c25ea
58
deps/ox/src/ox/std/string.hpp
vendored
58
deps/ox/src/ox/std/string.hpp
vendored
@ -38,6 +38,46 @@ class BasicString {
|
|||||||
|
|
||||||
constexpr BasicString(BasicString&&) noexcept;
|
constexpr BasicString(BasicString&&) noexcept;
|
||||||
|
|
||||||
|
[[nodiscard]]
|
||||||
|
constexpr auto begin() noexcept {
|
||||||
|
return m_buff.begin();
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]]
|
||||||
|
constexpr auto end() noexcept {
|
||||||
|
return m_buff.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]]
|
||||||
|
constexpr auto cbegin() const noexcept {
|
||||||
|
return m_buff.cbegin();
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]]
|
||||||
|
constexpr auto cend() const noexcept {
|
||||||
|
return m_buff.cend();
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]]
|
||||||
|
constexpr auto rbegin() noexcept {
|
||||||
|
return m_buff.rbegin();
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]]
|
||||||
|
constexpr auto rend() noexcept {
|
||||||
|
return m_buff.rend();
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]]
|
||||||
|
constexpr auto crbegin() const noexcept {
|
||||||
|
return m_buff.crbegin();
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]]
|
||||||
|
constexpr auto crend() const noexcept {
|
||||||
|
return m_buff.crend();
|
||||||
|
}
|
||||||
|
|
||||||
BasicString &operator=(const char *str) noexcept;
|
BasicString &operator=(const char *str) noexcept;
|
||||||
|
|
||||||
BasicString &operator=(char *str) noexcept;
|
BasicString &operator=(char *str) noexcept;
|
||||||
@ -210,37 +250,43 @@ BasicString<SmallStringSize> &BasicString<SmallStringSize>::operator=(const char
|
|||||||
|
|
||||||
template<std::size_t SmallStringSize>
|
template<std::size_t SmallStringSize>
|
||||||
BasicString<SmallStringSize> &BasicString<SmallStringSize>::operator=(char *str) noexcept {
|
BasicString<SmallStringSize> &BasicString<SmallStringSize>::operator=(char *str) noexcept {
|
||||||
return *this = const_cast<const char*>(str);
|
*this = const_cast<const char*>(str);
|
||||||
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<std::size_t SmallStringSize>
|
template<std::size_t SmallStringSize>
|
||||||
BasicString<SmallStringSize> &BasicString<SmallStringSize>::operator=(char c) noexcept {
|
BasicString<SmallStringSize> &BasicString<SmallStringSize>::operator=(char c) noexcept {
|
||||||
char str[] = {c, 0};
|
char str[] = {c, 0};
|
||||||
return this->operator=(str);
|
this->operator=(str);
|
||||||
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<std::size_t SmallStringSize>
|
template<std::size_t SmallStringSize>
|
||||||
BasicString<SmallStringSize> &BasicString<SmallStringSize>::operator=(int i) noexcept {
|
BasicString<SmallStringSize> &BasicString<SmallStringSize>::operator=(int i) noexcept {
|
||||||
return this->operator=(static_cast<int64_t>(i));
|
this->operator=(static_cast<int64_t>(i));
|
||||||
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<std::size_t SmallStringSize>
|
template<std::size_t SmallStringSize>
|
||||||
BasicString<SmallStringSize> &BasicString<SmallStringSize>::operator=(int64_t i) noexcept {
|
BasicString<SmallStringSize> &BasicString<SmallStringSize>::operator=(int64_t i) noexcept {
|
||||||
char str[65] = {};
|
char str[65] = {};
|
||||||
ox_itoa(i, str);
|
ox_itoa(i, str);
|
||||||
return this->operator=(str);
|
this->operator=(str);
|
||||||
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<std::size_t SmallStringSize>
|
template<std::size_t SmallStringSize>
|
||||||
BasicString<SmallStringSize> &BasicString<SmallStringSize>::operator=(uint64_t i) noexcept {
|
BasicString<SmallStringSize> &BasicString<SmallStringSize>::operator=(uint64_t i) noexcept {
|
||||||
char str[65] = {};
|
char str[65] = {};
|
||||||
ox_itoa(i, str);
|
ox_itoa(i, str);
|
||||||
return this->operator=(str);
|
this->operator=(str);
|
||||||
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<std::size_t SmallStringSize>
|
template<std::size_t SmallStringSize>
|
||||||
BasicString<SmallStringSize> &BasicString<SmallStringSize>::operator=(const BasicString &src) noexcept {
|
BasicString<SmallStringSize> &BasicString<SmallStringSize>::operator=(const BasicString &src) noexcept {
|
||||||
return *this = src.c_str();
|
*this = src.c_str();
|
||||||
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<std::size_t SmallStringSize>
|
template<std::size_t SmallStringSize>
|
||||||
|
46
deps/ox/src/ox/std/vector.hpp
vendored
46
deps/ox/src/ox/std/vector.hpp
vendored
@ -102,15 +102,15 @@ class Vector: detail::SmallVector<T, SmallVectorSize> {
|
|||||||
using value_type = T;
|
using value_type = T;
|
||||||
using size_type = std::size_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> {
|
struct iterator: public std::iterator<std::bidirectional_iterator_tag, T> {
|
||||||
private:
|
private:
|
||||||
T *m_t = nullptr;
|
PtrType m_t = nullptr;
|
||||||
size_type m_offset = 0;
|
size_type m_offset = 0;
|
||||||
size_type m_max = 0;
|
size_type m_max = 0;
|
||||||
|
|
||||||
public:
|
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_t = t;
|
||||||
m_offset = offset;
|
m_offset = offset;
|
||||||
m_max = max;
|
m_max = max;
|
||||||
@ -223,36 +223,36 @@ class Vector: detail::SmallVector<T, SmallVectorSize> {
|
|||||||
|
|
||||||
~Vector();
|
~Vector();
|
||||||
|
|
||||||
constexpr iterator<T&> begin() const noexcept {
|
constexpr iterator<> begin() const noexcept {
|
||||||
return iterator<T&>(m_items, 0, m_size);
|
return iterator<>(m_items, 0, m_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr iterator<T&> end() const noexcept {
|
constexpr iterator<> end() const noexcept {
|
||||||
return iterator<T&>(m_items, m_size, m_size);
|
return iterator<>(m_items, m_size, m_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr iterator<const T&> cbegin() const noexcept {
|
constexpr iterator<const T&, const T*> cbegin() const noexcept {
|
||||||
return iterator<const T&>(m_items, 0, m_size);
|
return iterator<const T&, const T*>(m_items, 0, m_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr iterator<const T&> cend() const noexcept {
|
constexpr iterator<const T&, const T*> cend() const noexcept {
|
||||||
return iterator<const T&>(m_items, m_size, m_size);
|
return iterator<const T&, const T*>(m_items, m_size, m_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr iterator<T&, true> rbegin() const noexcept {
|
constexpr iterator<T&, T*, true> rbegin() const noexcept {
|
||||||
return iterator<T&, true>(m_items, 0, m_size);
|
return iterator<T&, T*, true>(m_items, m_size, m_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr iterator<T&, true> rend() const noexcept {
|
constexpr iterator<T&, T*, true> rend() const noexcept {
|
||||||
return iterator<T&, true>(m_items, m_size, m_size);
|
return iterator<T&, T*, true>(m_items, 0, m_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr iterator<const T&, true> crbegin() const noexcept {
|
constexpr iterator<const T&, const T*, true> crbegin() const noexcept {
|
||||||
return iterator<const T&, true>(m_items, 0, m_size);
|
return iterator<const T&, const T*, true>(m_items, m_size, m_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr iterator<const T&, true> crend() const noexcept {
|
constexpr iterator<const T&, const T*, true> crend() const noexcept {
|
||||||
return iterator<const T&, true>(m_items, m_size, m_size);
|
return iterator<const T&, const T*, true>(m_items, 0, m_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator==(const Vector &other) const;
|
bool operator==(const Vector &other) const;
|
||||||
@ -310,8 +310,8 @@ class Vector: detail::SmallVector<T, SmallVectorSize> {
|
|||||||
* @param pos iterator at the point to remove
|
* @param pos iterator at the point to remove
|
||||||
* @return Error if index is out of bounds
|
* @return Error if index is out of bounds
|
||||||
*/
|
*/
|
||||||
template<typename RefType, bool reverse>
|
template<typename RefType, typename RefPtr, bool reverse>
|
||||||
Error erase(const iterator<RefType, reverse> &pos);
|
Error erase(const iterator<RefType, RefPtr, reverse> &pos);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes an item from the Vector.
|
* 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 T, std::size_t SmallVectorSize>
|
||||||
template<typename RefType, bool reverse>
|
template<typename RefType, typename RefPtr, bool reverse>
|
||||||
Error Vector<T, SmallVectorSize>::erase(const iterator<RefType, reverse> &pos) {
|
Error Vector<T, SmallVectorSize>::erase(const iterator<RefType, RefPtr, reverse> &pos) {
|
||||||
return erase(pos.offset());
|
return erase(pos.offset());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user