[PQ] Allow to provide a default unit for parsing, e.g. "0" -> "0ft"

This commit is contained in:
Klaus Basan
2020-04-15 05:28:34 +02:00
committed by Mat Sutcliffe
parent 92fdbd3117
commit 9b031bb582
2 changed files with 22 additions and 4 deletions

View File

@@ -21,6 +21,7 @@
#include "blackmisc/pq/acceleration.h"
#include "blackmisc/propertyindexvariantmap.h"
#include "blackmisc/comparefunctions.h"
#include "blackmisc/stringutils.h"
#include "blackmisc/dictionary.h"
#include "blackmisc/variant.h"
#include "blackmisc/verify.h"
@@ -419,7 +420,7 @@ namespace BlackMisc
// there is no double qHash
// also unit and rounding has to be considered
hashs << qHash(this->valueRoundedWithUnit(MU::defaultUnit()));
return BlackMisc::calculateHash(hashs, "PQ");
return calculateHash(hashs, "PQ");
}
template <class MU, class PQ>
@@ -449,6 +450,20 @@ namespace BlackMisc
*this = CPqString::parse<PQ>(value, mode);
}
template<class MU, class PQ>
void CPhysicalQuantity<MU, PQ>::parseFromString(const QString &value, CPqString::SeparatorMode mode, const MU &defaultUnitIfMissing)
{
if (is09OnlyString(value))
{
const QString v = value + defaultUnitIfMissing.getName();
this->parseFromString(v, mode);
}
else
{
this->parseFromString(value, mode);
}
}
template <class MU, class PQ>
void CPhysicalQuantity<MU, PQ>::parseFromString(const QString &value)
{

View File

@@ -47,7 +47,7 @@ namespace BlackMisc
*/
template <class MU, class PQ> class CPhysicalQuantity :
public Mixin::DBusOperators<CPhysicalQuantity<MU, PQ>>,
public Mixin::DataStreamOperators<CPhysicalQuantity<MU, PQ>>,
public Mixin::DataStreamOperators<CPhysicalQuantity<MU, PQ>>,
public Mixin::JsonOperators<CPhysicalQuantity<MU, PQ>>,
public Mixin::Index<PQ>,
public Mixin::MetaType<PQ>,
@@ -255,11 +255,14 @@ namespace BlackMisc
//! \copydoc BlackMisc::Mixin::String::toQString
QString convertToQString(bool i18n = false) const;
//! Parse value from string
void parseFromString(const QString &value);
//! Parse to string, with specified separator
void parseFromString(const QString &value, CPqString::SeparatorMode mode);
//! Parse value from string
void parseFromString(const QString &value);
//! Parse to string, with specified separator
void parseFromString(const QString &value, CPqString::SeparatorMode mode, const MU &defaultUnitIfMissing);
//! Compare with other PQ
int compare(const PQ &other) const { return compareImpl(*this->derived(), other); }