mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 14:57:35 +00:00
LibCore: Make MappedFile OwnPtr-based
Since it will become a stream in a little bit, it should behave like all non-trivial stream classes, who are not primarily intended to have shared ownership to make closing behavior more predictable. Across all uses of MappedFile, there is only one use case of shared mapped files in LibVideo, which now uses the thin SharedMappedFile wrapper.
This commit is contained in:
parent
5b2496e522
commit
062e0db46c
32 changed files with 80 additions and 64 deletions
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2023, kleines Filmröllchen <filmroellchen@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
@ -8,20 +9,20 @@
|
|||
|
||||
#include <AK/Error.h>
|
||||
#include <AK/Noncopyable.h>
|
||||
#include <AK/NonnullRefPtr.h>
|
||||
#include <AK/NonnullOwnPtr.h>
|
||||
#include <AK/RefCounted.h>
|
||||
#include <LibCore/Forward.h>
|
||||
|
||||
namespace Core {
|
||||
|
||||
class MappedFile : public RefCounted<MappedFile> {
|
||||
class MappedFile {
|
||||
AK_MAKE_NONCOPYABLE(MappedFile);
|
||||
AK_MAKE_NONMOVABLE(MappedFile);
|
||||
|
||||
public:
|
||||
static ErrorOr<NonnullRefPtr<MappedFile>> map(StringView path);
|
||||
static ErrorOr<NonnullRefPtr<MappedFile>> map_from_file(NonnullOwnPtr<Core::File>, StringView path);
|
||||
static ErrorOr<NonnullRefPtr<MappedFile>> map_from_fd_and_close(int fd, StringView path);
|
||||
static ErrorOr<NonnullOwnPtr<MappedFile>> map(StringView path);
|
||||
static ErrorOr<NonnullOwnPtr<MappedFile>> map_from_file(NonnullOwnPtr<Core::File>, StringView path);
|
||||
static ErrorOr<NonnullOwnPtr<MappedFile>> map_from_fd_and_close(int fd, StringView path);
|
||||
~MappedFile();
|
||||
|
||||
void* data() { return m_data; }
|
||||
|
@ -38,4 +39,18 @@ private:
|
|||
size_t m_size { 0 };
|
||||
};
|
||||
|
||||
class SharedMappedFile : public RefCounted<SharedMappedFile> {
|
||||
public:
|
||||
explicit SharedMappedFile(NonnullOwnPtr<MappedFile> file)
|
||||
: m_file(move(file))
|
||||
{
|
||||
}
|
||||
|
||||
MappedFile const& operator->() const { return *m_file; }
|
||||
MappedFile& operator->() { return *m_file; }
|
||||
|
||||
private:
|
||||
NonnullOwnPtr<MappedFile> m_file;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue