[libcalamares] don't inherit RegionZonePair from std::pair

There is no reason to stick with std::pair, make this
a regular value type with accessors with meaningful names.
This commit is contained in:
Adriaan de Groot 2024-02-19 22:42:32 +01:00
parent 5a1428154c
commit d131f51468
2 changed files with 41 additions and 18 deletions

View File

@ -79,9 +79,9 @@ GeoIPXML::processReply( const QByteArray& data )
for ( const auto& e : getElementTexts( data, m_element ) ) for ( const auto& e : getElementTexts( data, m_element ) )
{ {
auto tz = splitTZString( e ); auto tz = splitTZString( e );
if ( !tz.first.isEmpty() ) if ( tz.isValid() )
{ {
return tz; return RegionZonePair( tz );
} }
} }

View File

@ -12,10 +12,11 @@
#include "DllMacro.h" #include "DllMacro.h"
#include <QDebug>
#include <QString> #include <QString>
#include <QUrl> #include <QUrl>
#include <utility> #include <tuple>
class QByteArray; class QByteArray;
@ -23,8 +24,6 @@ namespace Calamares
{ {
namespace GeoIP namespace GeoIP
{ {
using RegionZonePairBase = std::pair< QString, QString >;
/** @brief A Region, Zone pair of strings /** @brief A Region, Zone pair of strings
* *
* A GeoIP lookup returns a timezone, which is represented as a Region, * A GeoIP lookup returns a timezone, which is represented as a Region,
@ -32,28 +31,52 @@ using RegionZonePairBase = std::pair< QString, QString >;
* pasting the strings back together with a "/" is the right thing to * pasting the strings back together with a "/" is the right thing to
* do. The Zone **may** contain a "/" (e.g. "Kentucky/Monticello"). * do. The Zone **may** contain a "/" (e.g. "Kentucky/Monticello").
*/ */
class DLLEXPORT RegionZonePair : public RegionZonePairBase class DLLEXPORT RegionZonePair
{ {
public: public:
/** @brief Construct from an existing pair. */
explicit RegionZonePair( const RegionZonePairBase& p )
: RegionZonePairBase( p )
{
}
/** @brief Construct from two strings, like qMakePair(). */ /** @brief Construct from two strings, like qMakePair(). */
RegionZonePair( const QString& region, const QString& zone ) RegionZonePair( const QString& region, const QString& zone )
: RegionZonePairBase( region, zone ) : m_region( region )
{ , m_zone( zone )
}
/** @brief An invalid zone pair (empty strings). */
RegionZonePair()
: RegionZonePairBase( QString(), QString() )
{ {
} }
bool isValid() const { return !first.isEmpty(); } /** @brief Construct from an existing pair. */
RegionZonePair( const RegionZonePair& p )
: RegionZonePair( p.m_region, p.m_zone )
{
}
/** @brief An invalid zone pair (empty strings). */
RegionZonePair() = default;
bool isValid() const { return !m_region.isEmpty(); }
QString region() const { return m_region; }
QString zone() const { return m_zone; }
friend bool operator==( const RegionZonePair& lhs, const RegionZonePair& rhs ) noexcept
{
return std::tie( lhs.m_region, lhs.m_zone ) == std::tie( rhs.m_region, rhs.m_zone );
}
private:
QString m_region;
QString m_zone;
}; };
inline QDebug&
operator<<( QDebug&& s, const RegionZonePair& tz )
{
return s << tz.region() << '/' << tz.zone();
}
inline QDebug&
operator<<( QDebug& s, const RegionZonePair& tz )
{
return s << tz.region() << '/' << tz.zone();
}
/** @brief Splits a region/zone string into a pair. /** @brief Splits a region/zone string into a pair.
* *
* Cleans up the string by removing backslashes (\\) * Cleans up the string by removing backslashes (\\)