DiskPartitionMetadata.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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/RefPtr.h>
  8. #include <AK/UUID.h>
  9. #include <Kernel/Devices/BlockDevice.h>
  10. namespace Kernel {
  11. class DiskPartitionMetadata {
  12. private:
  13. class PartitionType {
  14. friend class DiskPartitionMetadata;
  15. public:
  16. explicit PartitionType(u8 partition_type);
  17. explicit PartitionType(Array<u8, 16> partition_type);
  18. UUID to_uuid() const;
  19. u8 to_byte_indicator() const;
  20. bool is_uuid() const;
  21. bool is_valid() const;
  22. private:
  23. Array<u8, 16> m_partition_type {};
  24. bool m_partition_type_is_uuid { false };
  25. };
  26. public:
  27. DiskPartitionMetadata(u64 block_offset, u64 block_limit, u8 partition_type);
  28. DiskPartitionMetadata(u64 start_block, u64 end_block, Array<u8, 16> partition_type);
  29. DiskPartitionMetadata(u64 block_offset, u64 block_limit, Array<u8, 16> partition_type, UUID unique_guid, u64 special_attributes, String name);
  30. u64 start_block() const;
  31. u64 end_block() const;
  32. DiskPartitionMetadata offset(u64 blocks_count) const;
  33. Optional<u64> special_attributes() const;
  34. Optional<String> name() const;
  35. const PartitionType& type() const;
  36. const UUID& unique_guid() const;
  37. private:
  38. u64 m_start_block;
  39. u64 m_end_block;
  40. PartitionType m_type;
  41. UUID m_unique_guid {};
  42. u64 m_attributes { 0 };
  43. String m_name;
  44. };
  45. }