1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 08:48:11 +00:00
serenity/Kernel/KString.h
Gunnar Beutner 87ff76bd57 Kernel: Make KString non-copyable and non-movable
The user is supposed to hold these in an OwnPtr but bad things would
happen if the user takes these out of the OwnPtr so let's make the
class non-copyable and non-movable.
2021-06-02 18:00:13 +02:00

53 lines
1.2 KiB
C++

/*
* Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/Format.h>
#include <AK/OwnPtr.h>
namespace Kernel {
class KString {
AK_MAKE_NONCOPYABLE(KString);
AK_MAKE_NONMOVABLE(KString);
public:
static OwnPtr<KString> try_create_uninitialized(size_t, char*&);
static NonnullOwnPtr<KString> must_create_uninitialized(size_t, char*&);
static OwnPtr<KString> try_create(StringView const&);
static NonnullOwnPtr<KString> must_create(StringView const&);
OwnPtr<KString> try_clone() const;
bool is_empty() const { return m_length == 0; }
size_t length() const { return m_length; }
char const* characters() const { return m_characters; }
StringView view() const { return { characters(), length() }; }
private:
explicit KString(size_t length)
: m_length(length)
{
}
size_t m_length { 0 };
char m_characters[0];
};
}
namespace AK {
template<>
struct Formatter<Kernel::KString> : Formatter<StringView> {
void format(FormatBuilder& builder, Kernel::KString const& value)
{
Formatter<StringView>::format(builder, value.characters());
}
};
}