From 525756026515f6730c7baa5814e5a9d0749de9e7 Mon Sep 17 00:00:00 2001 From: Mathew Sutcliffe Date: Tue, 13 Aug 2013 22:44:01 +0100 Subject: [PATCH] fixed repeatedly increasing memory usage in units unmarshalling code --- src/blackmisc/pqbase.h | 19 ++++--- src/blackmisc/pqunits.h | 107 +++++++++++++++++++++++++--------------- 2 files changed, 78 insertions(+), 48 deletions(-) diff --git a/src/blackmisc/pqbase.h b/src/blackmisc/pqbase.h index 462fd527c..78c663189 100644 --- a/src/blackmisc/pqbase.h +++ b/src/blackmisc/pqbase.h @@ -249,14 +249,17 @@ public: static const QList &prefixes() { static QList prefixes; - prefixes.append(CMeasurementPrefix::c()); - prefixes.append(CMeasurementPrefix::G()); - prefixes.append(CMeasurementPrefix::h()); - prefixes.append(CMeasurementPrefix::k()); - prefixes.append(CMeasurementPrefix::M()); - prefixes.append(CMeasurementPrefix::m()); - prefixes.append(CMeasurementPrefix::None()); - prefixes.append(CMeasurementPrefix::One()); + if (prefixes.isEmpty()) + { + prefixes.append(CMeasurementPrefix::c()); + prefixes.append(CMeasurementPrefix::G()); + prefixes.append(CMeasurementPrefix::h()); + prefixes.append(CMeasurementPrefix::k()); + prefixes.append(CMeasurementPrefix::M()); + prefixes.append(CMeasurementPrefix::m()); + prefixes.append(CMeasurementPrefix::None()); + prefixes.append(CMeasurementPrefix::One()); + } return prefixes; } diff --git a/src/blackmisc/pqunits.h b/src/blackmisc/pqunits.h index c11350d76..b2ff38146 100644 --- a/src/blackmisc/pqunits.h +++ b/src/blackmisc/pqunits.h @@ -140,13 +140,16 @@ public: static const QList &units() { static QList u; - u.append(CLengthUnit::cm()); - u.append(CLengthUnit::ft()); - u.append(CLengthUnit::km()); - u.append(CLengthUnit::m()); - u.append(CLengthUnit::mi()); - u.append(CLengthUnit::miStatute()); - u.append(CLengthUnit::NM()); + if (u.isEmpty()) + { + u.append(CLengthUnit::cm()); + u.append(CLengthUnit::ft()); + u.append(CLengthUnit::km()); + u.append(CLengthUnit::m()); + u.append(CLengthUnit::mi()); + u.append(CLengthUnit::miStatute()); + u.append(CLengthUnit::NM()); + } return u; } @@ -277,9 +280,12 @@ public: static const QList &units() { static QList u; - u.append(CAngleUnit::deg()); - u.append(CAngleUnit::rad()); - u.append(CAngleUnit::sexagesimalDeg()); + if (u.isEmpty()) + { + u.append(CAngleUnit::deg()); + u.append(CAngleUnit::rad()); + u.append(CAngleUnit::sexagesimalDeg()); + } return u; } @@ -391,10 +397,13 @@ public: static const QList &units() { static QList u; - u.append(CFrequencyUnit::GHz()); - u.append(CFrequencyUnit::Hz()); - u.append(CFrequencyUnit::kHz()); - u.append(CFrequencyUnit::MHz()); + if (u.isEmpty()) + { + u.append(CFrequencyUnit::GHz()); + u.append(CFrequencyUnit::Hz()); + u.append(CFrequencyUnit::kHz()); + u.append(CFrequencyUnit::MHz()); + } return u; } @@ -510,10 +519,13 @@ public: static const QList &units() { static QList u; - u.append(CMassUnit::g()); - u.append(CMassUnit::kg()); - u.append(CMassUnit::lb()); - u.append(CMassUnit::t()); + if (u.isEmpty()) + { + u.append(CMassUnit::g()); + u.append(CMassUnit::kg()); + u.append(CMassUnit::lb()); + u.append(CMassUnit::t()); + } return u; } @@ -662,12 +674,15 @@ public: static const QList &units() { static QList u; - u.append(CPressureUnit::bar()); - u.append(CPressureUnit::hPa()); - u.append(CPressureUnit::inHg()); - u.append(CPressureUnit::inHgFL()); - u.append(CPressureUnit::mbar()); - u.append(CPressureUnit::psi()); + if (u.isEmpty()) + { + u.append(CPressureUnit::bar()); + u.append(CPressureUnit::hPa()); + u.append(CPressureUnit::inHg()); + u.append(CPressureUnit::inHgFL()); + u.append(CPressureUnit::mbar()); + u.append(CPressureUnit::psi()); + } return u; } @@ -804,9 +819,12 @@ public: static const QList &units() { static QList u; - u.append(CTemperatureUnit::C()); - u.append(CTemperatureUnit::F()); - u.append(CTemperatureUnit::K()); + if (u.isEmpty()) + { + u.append(CTemperatureUnit::C()); + u.append(CTemperatureUnit::F()); + u.append(CTemperatureUnit::K()); + } return u; } @@ -945,12 +963,15 @@ public: static const QList &units() { static QList u; - u.append(CSpeedUnit::ft_min()); - u.append(CSpeedUnit::ft_s()); - u.append(CSpeedUnit::km_h()); - u.append(CSpeedUnit::kts()); - u.append(CSpeedUnit::m_s()); - u.append(CSpeedUnit::NM_h()); + if (u.isEmpty()) + { + u.append(CSpeedUnit::ft_min()); + u.append(CSpeedUnit::ft_s()); + u.append(CSpeedUnit::km_h()); + u.append(CSpeedUnit::kts()); + u.append(CSpeedUnit::m_s()); + u.append(CSpeedUnit::NM_h()); + } return u; } @@ -1078,11 +1099,14 @@ public: static const QList &units() { static QList u; - u.append(CTimeUnit::d()); - u.append(CTimeUnit::h()); - u.append(CTimeUnit::min()); - u.append(CTimeUnit::ms()); - u.append(CTimeUnit::s()); + if (u.isEmpty()) + { + u.append(CTimeUnit::d()); + u.append(CTimeUnit::h()); + u.append(CTimeUnit::min()); + u.append(CTimeUnit::ms()); + u.append(CTimeUnit::s()); + } return u; } @@ -1179,8 +1203,11 @@ public: static const QList &units() { static QList u; - u.append(CAccelerationUnit::ft_s2()); - u.append(CAccelerationUnit::m_s2()); + if (u.isEmpty()) + { + u.append(CAccelerationUnit::ft_s2()); + u.append(CAccelerationUnit::m_s2()); + } return u; }