Files
Undefine ee1cf23dec LibACPI: Add a failable way to clone an Object
This will be needed in the kernel.
2026-11-07 13:27:30 +01:00

43 lines
1.1 KiB
C++

/*
* Copyright (c) 2026, Undefine <[email protected]>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include "Object.h"
namespace ACPI::AML {
ErrorOr<String> String::clone() const
{
return String(TRY(m_buffer.clone()));
}
ErrorOr<Buffer> Buffer::clone() const
{
return Buffer(TRY(m_buffer.clone()));
}
ErrorOr<Package> Package::clone() const
{
Vector<Object> package;
TRY(package.try_ensure_capacity(m_package.size()));
for (auto const& object : m_package)
package.unchecked_append(TRY(object.clone()));
return Package(move(package));
}
ErrorOr<Object> Object::clone() const
{
return m_data.visit(
[](AK::Empty) -> ErrorOr<Object> { return Object(); },
[](u64 value) -> ErrorOr<Object> { return value; },
[](String const& value) -> ErrorOr<Object> { return TRY(value.clone()); },
[](Buffer const& value) -> ErrorOr<Object> { return TRY(value.clone()); },
[](Package const& value) -> ErrorOr<Object> { return TRY(value.clone()); },
[](NameString const& value) -> ErrorOr<Object> { return TRY(value.clone()); });
}
}