diff --git a/lib/glacier/container/vector.h b/lib/glacier/container/vector.h index 08a5653..afe6229 100644 --- a/lib/glacier/container/vector.h +++ b/lib/glacier/container/vector.h @@ -45,6 +45,8 @@ class Vector { template void EmplaceBack(Args&&... args); + T&& PopBack(); + private: T* data_; uint64_t size_; @@ -119,6 +121,12 @@ void Vector::EmplaceBack(Args&&... args) { data_[size_++] = T(args...); } +template +T&& Vector::PopBack() { + size_--; + return glcr::Move(data_[size_]); +} + template void Vector::Expand() { uint64_t new_capacity = capacity_ == 0 ? 1 : capacity_ * 2; diff --git a/lib/glacier/string/string_builder.cpp b/lib/glacier/string/string_builder.cpp index 2fbd176..8bb2879 100644 --- a/lib/glacier/string/string_builder.cpp +++ b/lib/glacier/string/string_builder.cpp @@ -19,6 +19,14 @@ void VariableStringBuilder::PushBack(const StringView& str) { void VariableStringBuilder::PushBack(const char str) { data_.PushBack(str); } +void VariableStringBuilder::DeleteLast() { + if (data_.size() > 0) { + data_.PopBack(); + } +} + +void VariableStringBuilder::Reset() { data_ = glcr::Vector(); } + String VariableStringBuilder::ToString() const { return String(data_.RawPtr(), size()); } @@ -50,4 +58,12 @@ FixedStringBuilder::operator StringView() const { return StringView(buffer_, size_); } +void FixedStringBuilder::DeleteLast() { + if (size_ > 0) { + size_--; + } +} + +void FixedStringBuilder::Reset() { size_ = 0; } + } // namespace glcr diff --git a/lib/glacier/string/string_builder.h b/lib/glacier/string/string_builder.h index 444fbc1..7eb3d2d 100644 --- a/lib/glacier/string/string_builder.h +++ b/lib/glacier/string/string_builder.h @@ -12,6 +12,9 @@ class StringBuilder { virtual void PushBack(const StringView& str) = 0; virtual void PushBack(const char str) = 0; + virtual void DeleteLast() = 0; + virtual void Reset() = 0; + virtual String ToString() const = 0; virtual operator StringView() const = 0; @@ -30,6 +33,9 @@ class VariableStringBuilder : public StringBuilder { virtual void PushBack(const StringView& str) override; virtual void PushBack(const char str) override; + virtual void DeleteLast() override; + virtual void Reset() override; + virtual String ToString() const override; // Note that this could become invalidated @@ -56,6 +62,9 @@ class FixedStringBuilder : public StringBuilder { virtual void PushBack(const StringView& str) override; virtual void PushBack(const char str) override; + virtual void DeleteLast() override; + virtual void Reset() override; + virtual String ToString() const override; virtual operator StringView() const override;