diff --git a/src/modules/partition/core/PartUtils.cpp b/src/modules/partition/core/PartUtils.cpp index 4dfd6d81f..9bcd2bb8e 100644 --- a/src/modules/partition/core/PartUtils.cpp +++ b/src/modules/partition/core/PartUtils.cpp @@ -43,216 +43,6 @@ namespace PartUtils { -static const NamedEnumTable& -unitSuffixes() -{ - static const NamedEnumTable names{ - { QStringLiteral( "%" ), SizeUnit::Percent }, - { QStringLiteral( "B" ), SizeUnit::Byte }, - { QStringLiteral( "K" ), SizeUnit::KiB }, - { QStringLiteral( "M" ), SizeUnit::MiB }, - { QStringLiteral( "G" ), SizeUnit::GiB } - }; - - return names; -} - -PartSize::PartSize( const QString& s ) - : NamedSuffix( unitSuffixes(), s ) -{ - if ( ( unit() == SizeUnit::Percent ) && ( value() > 100 || value() < 0 ) ) - { - cDebug() << "Percent value" << value() << "is not valid."; - m_value = 0; - } - - if ( m_unit == SizeUnit::None ) - { - m_value = s.toInt(); - if ( m_value > 0 ) - m_unit = SizeUnit::Byte; - } - - if ( m_value <= 0 ) - { - m_value = 0; - m_unit = SizeUnit::None; - } -} - -qint64 -PartSize::toSectors( qint64 totalSectors, qint64 sectorSize ) const -{ - if ( !isValid() ) - return -1; - if ( totalSectors < 1 || sectorSize < 1 ) - return -1; - - switch ( m_unit ) - { - case unit_t::None: - return -1; - case unit_t::Percent: - if ( value() == 100 ) - return totalSectors; // Common-case, avoid futzing around - else - return totalSectors * value() / 100; - case unit_t::Byte: - case unit_t::KiB: - case unit_t::MiB: - case unit_t::GiB: - return CalamaresUtils::bytesToSectors ( toBytes(), sectorSize ); - } - - return -1; -} - -qint64 -PartSize::toBytes( qint64 totalSectors, qint64 sectorSize ) const -{ - if ( !isValid() ) - return -1; - - switch ( m_unit ) - { - case unit_t::None: - return -1; - case unit_t::Percent: - if ( totalSectors < 1 || sectorSize < 1 ) - return -1; - if ( value() == 100 ) - return totalSectors * sectorSize; // Common-case, avoid futzing around - else - return totalSectors * value() / 100; - case unit_t::Byte: - case unit_t::KiB: - case unit_t::MiB: - case unit_t::GiB: - return toBytes(); - } - - // notreached - return -1; -} - -qint64 -PartSize::toBytes( qint64 totalBytes ) const -{ - if ( !isValid() ) - return -1; - - switch ( m_unit ) - { - case unit_t::None: - return -1; - case unit_t::Percent: - if ( totalBytes < 1 ) - return -1; - if ( value() == 100 ) - return totalBytes; // Common-case, avoid futzing around - else - return totalBytes * value() / 100; - case unit_t::Byte: - case unit_t::KiB: - case unit_t::MiB: - case unit_t::GiB: - return toBytes(); - } - - // notreached - return -1; -} - -qint64 -PartSize::toBytes() const -{ - if ( !isValid() ) - return -1; - - switch ( m_unit ) - { - case unit_t::Byte: - return value(); - case unit_t::KiB: - return CalamaresUtils::KiBtoBytes( static_cast( value() ) ); - case unit_t::MiB: - return CalamaresUtils::MiBtoBytes( static_cast( value() ) ); - case unit_t::GiB: - return CalamaresUtils::GiBtoBytes( static_cast( value() ) ); - default: - break; - } - - // Reached only when unit is Percent or None - return -1; -} - -bool -PartSize::operator< ( const PartSize& other ) const -{ - if ( ( m_unit == SizeUnit::None || other.m_unit == SizeUnit::None ) || - ( m_unit == SizeUnit::Percent && other.m_unit != SizeUnit::Percent ) || - ( m_unit != SizeUnit::Percent && other.m_unit == SizeUnit::Percent ) ) - return false; - - switch ( m_unit ) - { - case SizeUnit::Percent: - return ( m_value < other.m_value ); - case SizeUnit::Byte: - case SizeUnit::KiB: - case SizeUnit::MiB: - case SizeUnit::GiB: - return ( toBytes() < other.toBytes () ); - } - - return false; -} - -bool -PartSize::operator> ( const PartSize& other ) const -{ - if ( ( m_unit == SizeUnit::None || other.m_unit == SizeUnit::None ) || - ( m_unit == SizeUnit::Percent && other.m_unit != SizeUnit::Percent ) || - ( m_unit != SizeUnit::Percent && other.m_unit == SizeUnit::Percent ) ) - return false; - - switch ( m_unit ) - { - case SizeUnit::Percent: - return ( m_value > other.m_value ); - case SizeUnit::Byte: - case SizeUnit::KiB: - case SizeUnit::MiB: - case SizeUnit::GiB: - return ( toBytes() > other.toBytes () ); - } - - return false; -} - -bool -PartSize::operator== ( const PartSize& other ) const -{ - if ( ( m_unit == SizeUnit::None || other.m_unit == SizeUnit::None ) || - ( m_unit == SizeUnit::Percent && other.m_unit != SizeUnit::Percent ) || - ( m_unit != SizeUnit::Percent && other.m_unit == SizeUnit::Percent ) ) - return false; - - switch ( m_unit ) - { - case SizeUnit::Percent: - return ( m_value == other.m_value ); - case SizeUnit::Byte: - case SizeUnit::KiB: - case SizeUnit::MiB: - case SizeUnit::GiB: - return ( toBytes() == other.toBytes () ); - } - - return false; -} - QString convenienceName( const Partition* const candidate ) { diff --git a/src/modules/partition/core/PartUtils.h b/src/modules/partition/core/PartUtils.h index 8f531b97e..71d786963 100644 --- a/src/modules/partition/core/PartUtils.h +++ b/src/modules/partition/core/PartUtils.h @@ -36,78 +36,6 @@ class Partition; namespace PartUtils { -using CalamaresUtils::MiBtoBytes; - -enum class SizeUnit -{ - None, - Percent, - Byte, - KiB, - MiB, - GiB -}; - -/** @brief Partition size expressions - * - * Sizes can be specified in bytes, KiB, MiB, GiB or percent (of - * the available drive space are on). This class handles parsing - * of such strings from the config file. - */ -class PartSize : public NamedSuffix -{ -public: - PartSize() : NamedSuffix() { } - PartSize( int v, unit_t u ) : NamedSuffix( v, u ) { } - PartSize( const QString& ); - - bool isValid() const - { - return ( unit() != SizeUnit::None ) && ( value() > 0 ); - } - - bool operator< ( const PartSize& other ) const; - bool operator> ( const PartSize& other ) const; - bool operator== ( const PartSize& other ) const; - - /** @brief Convert the size to the number of sectors @p totalSectors . - * - * Each sector has size @p sectorSize, for converting sizes in Bytes, - * KiB, MiB or GiB to sector counts. - * - * @return the number of sectors needed, or -1 for invalid sizes. - */ - qint64 toSectors( qint64 totalSectors, qint64 sectorSize ) const; - - /** @brief Convert the size to bytes. - * - * The device's sectors count @p totalSectors and sector size - * @p sectoreSize are used to calculated the total size, which - * is then used to calculate the size when using Percent. - * - * @return the size in bytes, or -1 for invalid sizes. - */ - qint64 toBytes( qint64 totalSectors, qint64 sectorSize ) const; - - /** @brief Convert the size to bytes. - * - * Total size @p totalBytes is needed for sizes in Percent. This - * parameter is unused in any other case. - * - * @return the size in bytes, or -1 for invalid sizes. - */ - qint64 toBytes( qint64 totalBytes ) const; - - /** @brief Convert the size to bytes. - * - * This method is only valid for sizes in Bytes, KiB, MiB or GiB. - * It will return -1 in any other case. - * - * @return the size in bytes, or -1 if it cannot be calculated. - */ - qint64 toBytes() const; -}; - /** * @brief Provides a nice human-readable name for @p candidate diff --git a/src/modules/partition/core/PartitionActions.cpp b/src/modules/partition/core/PartitionActions.cpp index 5a9c0b4c7..1c89a5b7f 100644 --- a/src/modules/partition/core/PartitionActions.cpp +++ b/src/modules/partition/core/PartitionActions.cpp @@ -103,7 +103,8 @@ doAutopartition( PartitionCoreModule* core, Device* dev, Choices::AutoPartitionO { if ( gs->contains( "efiSystemPartitionSize" ) ) { - PartUtils::PartSize part_size = PartUtils::PartSize( gs->value( "efiSystemPartitionSize" ).toString() ); + Calamares::PartitionSize part_size = Calamares::PartitionSize( + gs->value( "efiSystemPartitionSize" ).toString() ); uefisys_part_sizeB = part_size.toBytes( dev->capacity() ); } else diff --git a/src/modules/partition/core/PartitionLayout.cpp b/src/modules/partition/core/PartitionLayout.cpp index 35a540a96..a988da3f7 100644 --- a/src/modules/partition/core/PartitionLayout.cpp +++ b/src/modules/partition/core/PartitionLayout.cpp @@ -87,9 +87,9 @@ PartitionLayout::addEntry( PartitionLayout::PartitionEntry entry ) PartitionLayout::PartitionEntry::PartitionEntry( const QString& size, const QString& min, const QString& max ) { - partSize = PartUtils::PartSize( size ); - partMinSize = PartUtils::PartSize( min ); - partMaxSize = PartUtils::PartSize( max ); + partSize = Calamares::PartitionSize( size ); + partMinSize = Calamares::PartitionSize( min ); + partMaxSize = Calamares::PartitionSize( max ); } bool diff --git a/src/modules/partition/core/PartitionLayout.h b/src/modules/partition/core/PartitionLayout.h index 1d2fee410..74bc09873 100644 --- a/src/modules/partition/core/PartitionLayout.h +++ b/src/modules/partition/core/PartitionLayout.h @@ -20,6 +20,8 @@ #ifndef PARTITIONLAYOUT_H #define PARTITIONLAYOUT_H +#include "partition/PartitionSize.h" + #include "core/PartUtils.h" // KPMcore @@ -41,9 +43,9 @@ public: QString partLabel; QString partMountPoint; FileSystem::Type partFileSystem = FileSystem::Unknown; - PartUtils::PartSize partSize; - PartUtils::PartSize partMinSize; - PartUtils::PartSize partMaxSize; + Calamares::PartitionSize partSize; + Calamares::PartitionSize partMinSize; + Calamares::PartitionSize partMaxSize; /// @brief All-zeroes PartitionEntry PartitionEntry() {}