Iros
 
Loading...
Searching...
No Matches
file.h
Go to the documentation of this file.
1#pragma once
2
4
5#include "di/any/prelude.h"
11#include "di/types/prelude.h"
12#include "iris/core/error.h"
14
15namespace iris {
16namespace detail {
18 template<typename T>
22 };
23
25 template<typename T>
29 };
30
32 template<typename T>
36 };
37
41
45
49
51 auto operator()(auto&) const -> di::AnySenderOf<di::Span<byte const>> {
53 }
54 };
55}
56
58 : di::Dispatcher<WriteFileFunction, di::AnySenderOf<usize>(di::This&, UserspaceBuffer<byte const>),
59 detail::WriteFileDefaultFunction> {};
60
61constexpr inline auto write_file = WriteFileFunction {};
62
64 : di::Dispatcher<ReadFileFunction, di::AnySenderOf<usize>(di::This&, UserspaceBuffer<byte>),
65 detail::ReadFileDefaultFunction> {};
66
67constexpr inline auto read_file = ReadFileFunction {};
68
70 : di::Dispatcher<ReadDirectoryFunction, di::AnySenderOf<usize>(di::This&, UserspaceBuffer<byte>),
71 detail::ReadDirectoryDefaultFunction> {};
72
73constexpr inline auto read_directory = ReadDirectoryFunction {};
74
76 : di::Dispatcher<FileMetadataFunction, di::AnySenderOf<Metadata>(di::This&), detail::FileMetadataDefaultFunction> {
77};
78
79constexpr inline auto file_metadata = FileMetadataFunction {};
80
82 : di::Dispatcher<SeekFileFunction, di::AnySenderOf<i64>(di::This&, i64, int), detail::SeekFileDefaultFunction> {};
83
84constexpr inline auto seek_file = SeekFileFunction {};
85
87 : di::Dispatcher<FileTruncateFunction, di::AnySenderOf<>(di::This&, u64), detail::FileTruncateDefaultFunction> {};
88
89constexpr inline auto file_truncate = FileTruncateFunction {};
90
92 : di::Dispatcher<FileHACKRawDataFunction, di::AnySenderOf<di::Span<byte const>>(di::This&),
93 detail::FileHACKRawDataFunction> {};
94
96
100
102public:
104 for (auto [i, file] : di::enumerate(m_files)) {
105 if (!file.has_value()) {
106 m_file_allocated[i] = true;
107 return di::make_tuple(di::ref(file), static_cast<i32>(i));
108 }
109 }
111 }
112
114 if (file_handle < 0 || di::equal_or_greater(file_handle, m_files.size())) {
116 }
117 if (!m_file_allocated[file_handle] || !m_files[file_handle].has_value()) {
119 }
120 return m_files[file_handle];
121 }
122
124 if (file_handle < 0 || di::equal_or_greater(file_handle, m_files.size())) {
126 }
127 if (!m_file_allocated[file_handle] || !m_files[file_handle].has_value()) {
129 }
130 m_files[file_handle].reset();
131 m_file_allocated[file_handle] = false;
132 return {};
133 }
134
135private:
136 di::Array<File, 16> m_files {};
137 di::BitSet<16> m_file_allocated;
138};
139}
Definition bit_set.h:11
Definition span_forward_declaration.h:10
Definition unexpected.h:14
Definition file.h:101
auto deallocate_file_handle(i32 file_handle) -> Expected< void >
Definition file.h:123
auto allocate_file_handle() -> Expected< di::Tuple< File &, i32 > >
Definition file.h:103
auto lookup_file_handle(i32 file_handle) -> Expected< File & >
Definition file.h:113
Definition userspace_buffer.h:10
detail::DispatcherImpl< Self, Sig, Tags... > Dispatcher
Definition dispatcher.h:47
Any< Interface, SharedStorage< Alloc > > AnyShared
Definition any_shared.h:9
meta::Type< AnySenderOfT< T > > AnySenderOf
Definition any_sender.h:129
__UINT64_TYPE__ u64
Definition integers.h:12
__INT32_TYPE__ i32
Definition integers.h:16
__INT64_TYPE__ i64
Definition integers.h:17
Definition zstring_parser.h:9
constexpr auto ref
Definition reference_wrapper.h:98
constexpr auto equal_or_greater
Definition equal_or_greater.h:23
constexpr auto make_tuple(Args &&... args)
Definition make_tuple.h:9
Definition object_pool.h:14
Definition cxx_init.cpp:12
di::AnyShared< FileInterface > File
Definition file.h:99
@ BadFileDescriptor
Definition error.h:13
@ TooManyFilesOpen
Definition error.h:79
@ NotSupported
Definition error.h:60
constexpr auto file_truncate
Definition file.h:89
constexpr auto file_metadata
Definition file.h:79
constexpr auto seek_file
Definition file.h:84
constexpr auto file_hack_raw_data
Definition file.h:95
di::vocab::Expected< T, di::platform::GenericCode > Expected
Definition error.h:324
constexpr auto write_file
Definition file.h:61
di::meta::List< WriteFileFunction, ReadFileFunction, ReadDirectoryFunction, FileMetadataFunction, SeekFileFunction, FileTruncateFunction, FileHACKRawDataFunction > FileInterface
Definition file.h:97
constexpr auto read_directory
Definition file.h:73
constexpr auto read_file
Definition file.h:67
Definition core.h:5
Definition span_fixed_size.h:37
Definition file.h:93
Definition file.h:76
Definition file.h:87
Definition metadata.h:12
Definition file.h:71
Definition file.h:65
Definition file.h:82
Definition file.h:59
auto operator()(auto &) const -> di::AnySenderOf< di::Span< byte const > >
Definition file.h:51
auto operator()(auto &) const -> di::AnySenderOf< Metadata >
Definition file.h:43
auto operator()(auto &, u64) const -> di::AnySenderOf<>
Definition file.h:47
auto operator()(T &, UserspaceBuffer< byte >) const -> di::AnySenderOf< usize >
Definition file.h:33
auto operator()(T &, UserspaceBuffer< byte >) const -> di::AnySenderOf< usize >
Definition file.h:26
auto operator()(auto &, i64, int) const -> di::AnySenderOf< i64 >
Definition file.h:39
auto operator()(T &, UserspaceBuffer< byte const >) const -> di::AnySenderOf< usize >
Definition file.h:19