mirror of
https://github.com/EnderIce2/Fennix.git
synced 2025-05-28 15:34:31 +00:00
fix(kernel/std): 🐛 handle empty string case in append and resize methods
This commit is contained in:
parent
527ad803d3
commit
ca02557df4
@ -17,6 +17,9 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wredundant-decls"
|
||||||
|
|
||||||
#include <initializer_list>
|
#include <initializer_list>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
@ -1415,6 +1418,9 @@ namespace std
|
|||||||
{
|
{
|
||||||
if (_size < _capacity)
|
if (_size < _capacity)
|
||||||
{
|
{
|
||||||
|
if (_size == 0)
|
||||||
|
_size = Traits::length(_data);
|
||||||
|
|
||||||
CharT *new_data = _alloc.allocate(_size);
|
CharT *new_data = _alloc.allocate(_size);
|
||||||
memcpy(new_data, _data, _size);
|
memcpy(new_data, _data, _size);
|
||||||
|
|
||||||
@ -1654,17 +1660,17 @@ namespace std
|
|||||||
template <class InputIt>
|
template <class InputIt>
|
||||||
constexpr basic_string &append(InputIt first, InputIt last)
|
constexpr basic_string &append(InputIt first, InputIt last)
|
||||||
{
|
{
|
||||||
// size_type count = distance(first, last);
|
|
||||||
size_type count = last - first;
|
size_type count = last - first;
|
||||||
if (count > 0)
|
size_type old_size = _size;
|
||||||
{
|
size_type new_size = old_size + count;
|
||||||
size_type new_size = _size + count;
|
|
||||||
if (new_size > _capacity)
|
if (new_size + 1 > _capacity)
|
||||||
reserve(new_size);
|
reserve(new_size + 1);
|
||||||
std::copy(first, last, _data + _size);
|
|
||||||
_data[new_size] = '\0';
|
std::copy(first, last, _data + old_size);
|
||||||
|
|
||||||
_size = new_size;
|
_size = new_size;
|
||||||
}
|
_data[_size] = '\0';
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1825,6 +1831,9 @@ namespace std
|
|||||||
|
|
||||||
constexpr void resize(size_type count)
|
constexpr void resize(size_type count)
|
||||||
{
|
{
|
||||||
|
if (_size == 0 && _data != nullptr)
|
||||||
|
_size = Traits::length(_data);
|
||||||
|
|
||||||
if (count < _size)
|
if (count < _size)
|
||||||
erase(count);
|
erase(count);
|
||||||
else if (count > _size)
|
else if (count > _size)
|
||||||
@ -2476,3 +2485,5 @@ namespace std
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
Loading…
x
Reference in New Issue
Block a user