From 64ebfde8bcd6408e3b6925624e8680c314db6efc Mon Sep 17 00:00:00 2001 From: Hannes Schulze Date: Thu, 6 Feb 2025 19:54:38 +0100 Subject: get rid of nasty stdlib --- lib/nes/common/containers/string-view.hh | 40 ++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 lib/nes/common/containers/string-view.hh (limited to 'lib/nes/common/containers/string-view.hh') diff --git a/lib/nes/common/containers/string-view.hh b/lib/nes/common/containers/string-view.hh new file mode 100644 index 0000000..180a688 --- /dev/null +++ b/lib/nes/common/containers/string-view.hh @@ -0,0 +1,40 @@ +#pragma once + +#include "nes/common/containers/span.hh" +#include "nes/common/types.hh" + +namespace nes +{ + /// Non-owning view into a (not necessarily null-terminated) string. + class string_view + { + span data_; + + public: + explicit string_view() = default; + explicit string_view(span); + explicit string_view(char const* data, u32 length); + string_view(char const* c_string); + + using iterator = span::iterator; + + auto operator[](u32 const index) const -> char { return data_[index]; } + auto get_span() const -> span { return data_; } + auto get_data() const -> char const* { return data_.get_data(); } + auto get_length() const -> u32 { return data_.get_length(); } + auto is_empty() const -> bool { return get_length() == 0; } + auto begin() const -> iterator { return data_.begin(); } + auto end() const -> iterator { return data_.end(); } + + // String helpers + + auto get_first() const -> char; + auto get_last() const -> char; + auto contains(char) const -> bool; + auto substring(u32 first) const -> string_view; + auto substring(u32 first, u32 length) const -> string_view; + }; + + auto operator==(string_view, string_view) -> bool; + auto operator!=(string_view, string_view) -> bool; +} // namespace nes \ No newline at end of file -- cgit v1.3.1