Serenity Operating System
1/*
2 * Copyright (c) 2020-2022, Liav A. <liavalb@hotmail.co.il>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#pragma once
8
9#include <AK/NonnullRefPtr.h>
10#include <LibPartition/DiskPartitionMetadata.h>
11
12#ifdef KERNEL
13# include <Kernel/Storage/StorageDevice.h>
14#else
15# include <LibCore/Forward.h>
16#endif
17
18namespace Partition {
19
20class PartitionTable {
21public:
22 Optional<DiskPartitionMetadata> partition(unsigned index) const;
23 size_t partitions_count() const { return m_partitions.size(); }
24 virtual ~PartitionTable() = default;
25 virtual bool is_valid() const = 0;
26
27 Vector<DiskPartitionMetadata> partitions() const { return m_partitions; }
28 size_t block_size() const { return m_block_size; }
29
30protected:
31#ifdef KERNEL
32 explicit PartitionTable(Kernel::StorageDevice&);
33 NonnullRefPtr<Kernel::StorageDevice> m_device;
34#else
35 explicit PartitionTable(NonnullRefPtr<Core::DeprecatedFile>);
36 NonnullRefPtr<Core::DeprecatedFile> m_device_file;
37#endif
38
39 Vector<DiskPartitionMetadata> m_partitions;
40 size_t m_block_size;
41};
42
43}