blob: 2250ac05f920e66f079789bec8a1d79f40dc3b8d [file] [log] [blame]
William A. Kennington III891e6a32022-05-17 16:35:03 -07001#pragma once
Patrick Williamsd1984dd2023-05-10 16:12:44 -05002#include <stdplus/fd/intf.hpp>
3#include <stdplus/handle/managed.hpp>
4
William A. Kennington III891e6a32022-05-17 16:35:03 -07005#include <cstddef>
6#include <functional>
7#include <span>
William A. Kennington III891e6a32022-05-17 16:35:03 -07008
9namespace stdplus
10{
11namespace fd
12{
13
14class MMap
15{
16 public:
17 inline MMap(Fd& fd, size_t window_size, ProtFlags prot, MMapFlags flags,
18 off_t offset) :
19 MMap(
20 fd,
21 std::span<std::byte>{static_cast<std::byte*>(nullptr), window_size},
22 prot, flags, offset)
Patrick Williamsd1984dd2023-05-10 16:12:44 -050023 {}
William A. Kennington III891e6a32022-05-17 16:35:03 -070024 MMap(Fd& fd, std::span<std::byte> window, ProtFlags prot, MMapFlags flags,
25 off_t offset);
26
27 std::span<std::byte> get() const;
28
29 private:
30 static void drop(std::span<std::byte>&&, std::reference_wrapper<Fd>&);
31 Managed<std::span<std::byte>, std::reference_wrapper<Fd>>::Handle<drop>
32 mapping;
33};
34
35} // namespace fd
36} // namespace stdplus