Serenity Operating System
1/*
2 * Copyright (c) 2020, Liav A. <liavalb@hotmail.co.il>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#pragma once
8
9#include <AK/UUID.h>
10
11namespace Partition {
12
13class DiskPartitionMetadata {
14private:
15 class PartitionType {
16 friend class DiskPartitionMetadata;
17
18 public:
19 explicit PartitionType(u8 partition_type);
20 explicit PartitionType(Array<u8, 16> partition_type);
21 UUID to_uuid() const;
22 u8 to_byte_indicator() const;
23 bool is_uuid() const;
24 bool is_valid() const;
25
26 private:
27 Array<u8, 16> m_partition_type {};
28 bool m_partition_type_is_uuid { false };
29 };
30
31public:
32 DiskPartitionMetadata(u64 block_offset, u64 block_limit, u8 partition_type);
33 DiskPartitionMetadata(u64 start_block, u64 end_block, Array<u8, 16> partition_type);
34 DiskPartitionMetadata(u64 block_offset, u64 block_limit, Array<u8, 16> partition_type, UUID unique_guid, u64 special_attributes);
35 u64 start_block() const;
36 u64 end_block() const;
37
38 DiskPartitionMetadata offset(u64 blocks_count) const;
39
40 Optional<u64> special_attributes() const;
41 PartitionType const& type() const;
42 const UUID& unique_guid() const;
43
44private:
45 u64 m_start_block;
46 u64 m_end_block;
47 PartitionType m_type;
48 UUID m_unique_guid {};
49 u64 m_attributes { 0 };
50};
51
52}