DiskPartitionMetadata.h 1.3 KB

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