William A. Kennington III | 891e6a3 | 2022-05-17 16:35:03 -0700 | [diff] [blame] | 1 | #pragma once |
Patrick Williams | d1984dd | 2023-05-10 16:12:44 -0500 | [diff] [blame] | 2 | #include <stdplus/fd/intf.hpp> |
| 3 | #include <stdplus/handle/managed.hpp> |
| 4 | |
William A. Kennington III | 891e6a3 | 2022-05-17 16:35:03 -0700 | [diff] [blame] | 5 | #include <cstddef> |
| 6 | #include <functional> |
| 7 | #include <span> |
William A. Kennington III | 891e6a3 | 2022-05-17 16:35:03 -0700 | [diff] [blame] | 8 | |
| 9 | namespace stdplus |
| 10 | { |
| 11 | namespace fd |
| 12 | { |
| 13 | |
| 14 | class 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 Williams | d1984dd | 2023-05-10 16:12:44 -0500 | [diff] [blame] | 23 | {} |
William A. Kennington III | 891e6a3 | 2022-05-17 16:35:03 -0700 | [diff] [blame] | 24 | 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 |