summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnaud Ferraris <arnaud.ferraris@collabora.com>2019-05-08 19:26:31 +0200
committerArnaud Ferraris <arnaud.ferraris@collabora.com>2019-05-08 19:31:20 +0200
commit80fd3d33537579718ff0bd0b4a7583826c7db06b (patch)
tree39788299d616048d5b4c3d6730c7609cf1d46146
parent8f9f8f1cc1586a82f2cef66885b78a1cb5690a58 (diff)
[partition] Switch to using the generic PartitionSize class
Instead of relying on a module-specific implementation, use the new PartitionSize class for storing partition sizes. Signed-off-by: Arnaud Ferraris <arnaud.ferraris@collabora.com>
-rw-r--r--src/modules/partition/core/PartUtils.cpp210
-rw-r--r--src/modules/partition/core/PartUtils.h72
-rw-r--r--src/modules/partition/core/PartitionActions.cpp3
-rw-r--r--src/modules/partition/core/PartitionLayout.cpp6
-rw-r--r--src/modules/partition/core/PartitionLayout.h8
5 files changed, 10 insertions, 289 deletions
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<SizeUnit>&
-unitSuffixes()
-{
- static const NamedEnumTable<SizeUnit> 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<unsigned long long>( value() ) );
- case unit_t::MiB:
- return CalamaresUtils::MiBtoBytes( static_cast<unsigned long long>( value() ) );
- case unit_t::GiB:
- return CalamaresUtils::GiBtoBytes( static_cast<unsigned long long>( 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<SizeUnit, SizeUnit::None>
-{
-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() {}