/* * Copyright (c) 2026-present, the Ladybird developers. * * SPDX-License-Identifier: BSD-2-Clause */ #include namespace Core { ErrorOr ImmutableBytes::copy(ReadonlyBytes bytes) { return adopt(TRY(ByteBuffer::copy(bytes))); } ImmutableBytes ImmutableBytes::adopt(ByteBuffer bytes) { return ImmutableBytes { adopt_ref(*new Impl(move(bytes))) }; } ImmutableBytes ImmutableBytes::adopt_mapped_file(NonnullOwnPtr mapped_file) { return ImmutableBytes { adopt_ref(*new Impl(move(mapped_file))) }; } ErrorOr ImmutableBytes::map_from_fd_range_and_close(int fd, StringView path, off_t offset, size_t size) { return adopt_mapped_file(TRY(MappedFile::map_from_fd_range_and_close(fd, path, offset, size))); } bool ImmutableBytes::is_file_backed() const { return m_impl && m_impl->is_file_backed(); } ReadonlyBytes ImmutableBytes::bytes() const { if (!m_impl) return {}; return m_impl->bytes(); } ErrorOr ImmutableBytes::copy_to_byte_buffer() const { return ByteBuffer::copy(bytes()); } ImmutableBytes::ImmutableBytes(NonnullRefPtr impl) : m_impl(move(impl)) { } ImmutableBytes::Impl::Impl(ByteBuffer bytes) : m_storage(move(bytes)) { } ImmutableBytes::Impl::Impl(NonnullOwnPtr mapped_file) : m_storage(move(mapped_file)) { } bool ImmutableBytes::Impl::is_file_backed() const { return m_storage.has>(); } ReadonlyBytes ImmutableBytes::Impl::bytes() const { return m_storage.visit( [](ByteBuffer const& bytes) -> ReadonlyBytes { return bytes.bytes(); }, [](NonnullOwnPtr const& mapped_file) -> ReadonlyBytes { return mapped_file->bytes(); }); } }