Iros
 
Loading...
Searching...
No Matches
inode.h
Go to the documentation of this file.
1#pragma once
2
4
6#include "di/any/prelude.h"
9#include "di/types/integers.h"
11#include "iris/core/error.h"
12#include "iris/fs/file.h"
13#include "iris/fs/mount.h"
16
17namespace iris {
18class TNode;
19
21 : di::Dispatcher<InodeReadFunction,
22 di::AnySenderOf<mm::PhysicalAddress>(di::This&, mm::BackingObject&, u64 page_number)> {};
23
24constexpr inline auto inode_read = InodeReadFunction {};
25
27 : di::Dispatcher<InodeReadDirectoryFunction,
28 di::AnySenderOf<usize>(di::This&, mm::BackingObject&, u64& offset, UserspaceBuffer<byte> buffer)> {
29};
30
32
34 : di::Dispatcher<InodeLookupFunction,
35 di::AnySenderOf<di::Arc<TNode>>(di::This&, di::Arc<TNode>, di::TransparentStringView)> {};
36
37constexpr inline auto inode_lookup = InodeLookupFunction {};
38
39struct InodeMetadataFunction : di::Dispatcher<InodeMetadataFunction, di::AnySenderOf<Metadata>(di::This&)> {};
40
41constexpr inline auto inode_metadata = InodeMetadataFunction {};
42
44 : di::Dispatcher<InodeCreateNodeFunction, di::AnySenderOf<di::Arc<TNode>>(
45 di::This&, di::Arc<TNode>, di::TransparentStringView, MetadataType)> {
46};
47
48constexpr inline auto inode_create_node = InodeCreateNodeFunction {};
49
50struct InodeTruncateFunction : di::Dispatcher<InodeTruncateFunction, di::AnySenderOf<>(di::This&, u64)> {};
51
52constexpr inline auto inode_truncate = InodeTruncateFunction {};
53
55 : di::Dispatcher<InodeHACKRawDataFunction, di::AnySenderOf<di::Span<byte const>>(di::This&)> {};
56
58
62
64
83
84class Inode : public di::IntrusiveRefCount<Inode> {
85public:
86 explicit Inode(InodeImpl impl) : m_impl(di::move(impl)) {}
87
88 auto backing_object() -> mm::BackingObject& { return m_backing_object; }
89
90 auto mount() const -> di::Optional<Mount&> { return m_mount.transform(di::chain(di::dereference, di::ref)); }
91 void set_mount(di::Box<Mount> mount) { m_mount = di::move(mount); }
92
93private:
105
106 InodeImpl m_impl;
108 mm::BackingObject m_backing_object;
109};
110}
Definition box.h:28
Definition optional_forward_declaration.h:5
friend auto tag_invoke(di::Tag< read_file >, InodeFile &self, UserspaceBuffer< byte > buffer) -> di::AnySenderOf< usize >
Definition inode.cpp:51
InodeFile(di::Arc< TNode > tnode)
Definition inode.cpp:17
Definition inode.h:84
friend auto tag_invoke(di::Tag< inode_read >, Inode &self, mm::BackingObject &backing_object, u64 page_number) -> di::AnySenderOf< mm::PhysicalAddress >
Definition inode.cpp:19
auto mount() const -> di::Optional< Mount & >
Definition inode.h:90
Inode(InodeImpl impl)
Definition inode.h:86
auto backing_object() -> mm::BackingObject &
Definition inode.h:88
void set_mount(di::Box< Mount > mount)
Definition inode.h:91
Definition mount.h:7
Definition tnode.h:9
Definition userspace_buffer.h:10
Definition backing_object.h:21
constexpr usize size
Definition gfx_test.cpp:24
detail::DispatcherImpl< Self, Sig, Tags... > Dispatcher
Definition dispatcher.h:47
meta::Type< AnyT< UserInterface, Storage, VTablePolicy > > Any
Definition any.h:294
string::StringViewImpl< string::TransparentEncoding > TransparentStringView
Definition string_view.h:13
meta::Type< AnySenderOfT< T > > AnySenderOf
Definition any_sender.h:129
__UINT64_TYPE__ u64
Definition integers.h:12
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
__INT64_TYPE__ i64
Definition integers.h:17
IntrusivePtr< T, ArcTag > Arc
Definition arc.h:21
Definition zstring_parser.h:9
constexpr auto ref
Definition reference_wrapper.h:98
constexpr auto chain(F &&f)
Definition chain.h:59
constexpr auto dereference
Definition dereference.h:16
Definition cxx_init.cpp:12
constexpr auto inode_hack_raw_data
Definition inode.h:57
constexpr auto inode_metadata
Definition inode.h:41
constexpr auto inode_lookup
Definition inode.h:37
constexpr auto inode_create_node
Definition inode.h:48
constexpr auto inode_read
Definition inode.h:24
di::meta::List< InodeReadFunction, InodeReadDirectoryFunction, InodeLookupFunction, InodeMetadataFunction, InodeCreateNodeFunction, InodeTruncateFunction, InodeHACKRawDataFunction > InodeInterface
Definition inode.h:59
constexpr auto inode_read_directory
Definition inode.h:31
MetadataType
Definition metadata.h:6
constexpr auto inode_truncate
Definition inode.h:52
di::Any< InodeInterface > InodeImpl
Definition inode.h:63
Definition core.h:5
Definition arc.h:24
Definition inode.h:45
Definition inode.h:55
Definition inode.h:35
Definition inode.h:39
Definition inode.h:22
Definition inode.h:50