Implemented something like a console (still WIP).
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
#if !defined(BAD_APPLE_OS_CSTDIO_INCLUDED)
|
||||
#define BAD_APPLE_OS_CSTDIO_INCLUDED
|
||||
|
||||
#include <string>
|
||||
#include <stdio.h>
|
||||
|
||||
namespace std
|
||||
@@ -21,6 +22,9 @@ using ::fgets;
|
||||
using ::fgetc;
|
||||
using ::getc;
|
||||
using ::getchar;
|
||||
|
||||
bool fgetline(FILE* stream, std::string& outLine) noexcept;
|
||||
inline bool getline(std::string& outLine) noexcept { return fgetline(stdin, outLine); }
|
||||
}
|
||||
|
||||
#endif // !defined(BAD_APPLE_OS_CSTDIO_INCLUDED)
|
||||
|
||||
@@ -78,6 +78,15 @@ public:
|
||||
}
|
||||
constexpr basic_string& operator=(std::nullptr_t) = delete;
|
||||
|
||||
constexpr basic_string& operator+=(value_type chr) noexcept
|
||||
{
|
||||
return append(chr);
|
||||
}
|
||||
constexpr basic_string& operator+=(const basic_string& other) noexcept
|
||||
{
|
||||
return append(other);
|
||||
}
|
||||
|
||||
[[nodiscard]] constexpr reference operator[](size_type pos) noexcept { return _data[pos]; }
|
||||
[[nodiscard]] constexpr const_reference operator[](size_type pos) const noexcept { return _data[pos]; }
|
||||
|
||||
@@ -88,8 +97,8 @@ public:
|
||||
[[nodiscard]] constexpr reference front() noexcept { return _data.front(); }
|
||||
[[nodiscard]] constexpr const_reference front() const noexcept { return _data.front(); }
|
||||
|
||||
[[nodiscard]] constexpr reference back() noexcept { return _data.back(); }
|
||||
[[nodiscard]] constexpr const_reference back() const noexcept { return _data.back(); }
|
||||
[[nodiscard]] constexpr reference back() noexcept { return _data.at(size() - 1); }
|
||||
[[nodiscard]] constexpr const_reference back() const noexcept { return _data.at(size() - 1); }
|
||||
|
||||
[[nodiscard]] constexpr pointer data() noexcept { return _data.data(); }
|
||||
[[nodiscard]] constexpr const_pointer data() const noexcept { return _data.data(); }
|
||||
@@ -117,6 +126,29 @@ public:
|
||||
_data.back() = value_type(0);
|
||||
}
|
||||
|
||||
constexpr basic_string& append(value_type chr) noexcept
|
||||
{
|
||||
_data.back() = chr;
|
||||
_data.push_back(value_type());
|
||||
return *this;
|
||||
}
|
||||
constexpr basic_string& append(const basic_string& other) noexcept
|
||||
{
|
||||
_data.reserve(_data.size() + other.size());
|
||||
_data.resize(_data.size() - 1);
|
||||
for (char chr : other)
|
||||
{
|
||||
_data.push_back(chr);
|
||||
}
|
||||
_data.push_back(value_type());
|
||||
return *this;
|
||||
}
|
||||
constexpr void pop_back() noexcept
|
||||
{
|
||||
_data.pop_back();
|
||||
_data.back() = value_type();
|
||||
}
|
||||
|
||||
static inline size_type npos = size_type(-1);
|
||||
};
|
||||
using string = basic_string<char>;
|
||||
|
||||
@@ -214,6 +214,11 @@ public:
|
||||
++_size;
|
||||
}
|
||||
|
||||
constexpr void pop_back() noexcept
|
||||
{
|
||||
resize(size() - 1);
|
||||
}
|
||||
|
||||
template<typename... TArgs>
|
||||
constexpr reference emplace_back(TArgs&&... args)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user