File indexing completed on 2024-05-12 05:06:40
0001 /* 0002 SPDX-FileCopyrightText: 2002-2011 Thomas Baumgart <tbaumgart@kde.org> 0003 SPDX-FileCopyrightText: 2017-2018 Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com> 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "mymoneykeyvaluecontainer.h" 0008 #include "mymoneykeyvaluecontainer_p.h" 0009 0010 // ---------------------------------------------------------------------------- 0011 // QT Includes 0012 0013 // ---------------------------------------------------------------------------- 0014 // KDE Includes 0015 0016 // ---------------------------------------------------------------------------- 0017 // Project Includes 0018 0019 #include "mymoneyexception.h" 0020 0021 Q_GLOBAL_STATIC(QString, nullString) 0022 0023 QString MyMoneyKeyValueContainerPrivate::toString(bool value) const 0024 { 0025 return value ? QLatin1String("yes") : QLatin1String("no"); 0026 } 0027 0028 QString MyMoneyKeyValueContainerPrivate::toString(int value) const 0029 { 0030 return QStringLiteral("%1").arg(value); 0031 } 0032 0033 MyMoneyKeyValueContainer::MyMoneyKeyValueContainer() : 0034 d_ptr(new MyMoneyKeyValueContainerPrivate) 0035 { 0036 } 0037 0038 MyMoneyKeyValueContainer::MyMoneyKeyValueContainer(const MyMoneyKeyValueContainer& other) : 0039 d_ptr(new MyMoneyKeyValueContainerPrivate(*other.d_func())) 0040 { 0041 } 0042 0043 MyMoneyKeyValueContainer::~MyMoneyKeyValueContainer() 0044 { 0045 Q_D(MyMoneyKeyValueContainer); 0046 delete d; 0047 } 0048 0049 QString MyMoneyKeyValueContainer::value(const QString& key, const QString& defaultValue) const 0050 { 0051 Q_D(const MyMoneyKeyValueContainer); 0052 QMap<QString, QString>::ConstIterator it; 0053 0054 it = d->m_kvp.find(key); 0055 if (it != d->m_kvp.end()) 0056 return (*it); 0057 return defaultValue; 0058 } 0059 0060 bool MyMoneyKeyValueContainer::value(const QString& key, bool defaultValue) const 0061 { 0062 Q_D(const MyMoneyKeyValueContainer); 0063 const auto rc = value(key, d->toString(defaultValue)).toLower(); 0064 return rc == QLatin1String("yes") ? true : false; 0065 } 0066 0067 int MyMoneyKeyValueContainer::value(const QString& key, int defaultValue) const 0068 { 0069 Q_D(const MyMoneyKeyValueContainer); 0070 bool ok; 0071 const auto rc = value(key, d->toString(defaultValue)).toInt(&ok, 0); 0072 return ok ? rc : defaultValue; 0073 } 0074 0075 QString MyMoneyKeyValueContainer::value(const QString& key) const 0076 { 0077 return value(key, *nullString); 0078 } 0079 0080 void MyMoneyKeyValueContainer::setValue(const QString& key, const QString& value, const QString& defaultValue) 0081 { 0082 Q_D(MyMoneyKeyValueContainer); 0083 0084 QMap<QString, QString>::Iterator it; 0085 0086 if (value != defaultValue) { 0087 d->m_kvp[key] = value; 0088 } else { 0089 it = d->m_kvp.find(key); 0090 if (it != d->m_kvp.end()) { 0091 d->m_kvp.erase(it); 0092 } 0093 } 0094 } 0095 0096 void MyMoneyKeyValueContainer::setValue(const QString& key, const char* value) 0097 { 0098 setValue(key, QLatin1String(value)); 0099 } 0100 0101 void MyMoneyKeyValueContainer::setValue(const QString& key, bool value, bool defaultValue) 0102 { 0103 Q_D(MyMoneyKeyValueContainer); 0104 setValue(key, d->toString(value), d->toString(defaultValue)); 0105 } 0106 0107 void MyMoneyKeyValueContainer::setValue(const QString& key, int value, int defaultValue) 0108 { 0109 Q_D(MyMoneyKeyValueContainer); 0110 setValue(key, d->toString(value), d->toString(defaultValue)); 0111 } 0112 0113 QMap<QString, QString> MyMoneyKeyValueContainer::pairs() const 0114 { 0115 Q_D(const MyMoneyKeyValueContainer); 0116 return d->m_kvp; 0117 } 0118 0119 void MyMoneyKeyValueContainer::setPairs(const QMap<QString, QString>& list) 0120 { 0121 Q_D(MyMoneyKeyValueContainer); 0122 d->m_kvp = list; 0123 } 0124 0125 void MyMoneyKeyValueContainer::deletePair(const QString& key) 0126 { 0127 Q_D(MyMoneyKeyValueContainer); 0128 QMap<QString, QString>::Iterator it; 0129 0130 it = d->m_kvp.find(key); 0131 if (it != d->m_kvp.end()) 0132 d->m_kvp.erase(it); 0133 } 0134 0135 void MyMoneyKeyValueContainer::clear() 0136 { 0137 Q_D(MyMoneyKeyValueContainer); 0138 d->m_kvp.clear(); 0139 } 0140 0141 bool MyMoneyKeyValueContainer::operator == (const MyMoneyKeyValueContainer& right) const 0142 { 0143 Q_D(const MyMoneyKeyValueContainer); 0144 QMap<QString, QString>::ConstIterator it_a, it_b; 0145 0146 auto d2 = static_cast<const MyMoneyKeyValueContainerPrivate *>(right.d_func()); 0147 it_a = d->m_kvp.begin(); 0148 it_b = d2->m_kvp.begin(); 0149 0150 while (it_a != d->m_kvp.end() && it_b != d2->m_kvp.end()) { 0151 if (it_a.key() != it_b.key() 0152 || (((*it_a).length() != 0 || (*it_b).length() != 0) && *it_a != *it_b)) 0153 return false; 0154 ++it_a; 0155 ++it_b; 0156 } 0157 0158 return (it_a == d->m_kvp.end() && it_b == d2->m_kvp.end()); 0159 } 0160 0161 0162 QString MyMoneyKeyValueContainer::operator[](const QString& k) const 0163 { 0164 return value(k); 0165 } 0166 0167 QString& MyMoneyKeyValueContainer::operator[](const QString& k) 0168 { 0169 Q_D(MyMoneyKeyValueContainer); 0170 return d->m_kvp[k]; 0171 }