File indexing completed on 2024-05-12 16:42:37

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 MyMoneyKeyValueContainer::MyMoneyKeyValueContainer() :
0024     d_ptr(new MyMoneyKeyValueContainerPrivate)
0025 {
0026 }
0027 
0028 MyMoneyKeyValueContainer::MyMoneyKeyValueContainer(const MyMoneyKeyValueContainer& other) :
0029     d_ptr(new MyMoneyKeyValueContainerPrivate(*other.d_func()))
0030 {
0031 }
0032 
0033 MyMoneyKeyValueContainer::~MyMoneyKeyValueContainer()
0034 {
0035     Q_D(MyMoneyKeyValueContainer);
0036     delete d;
0037 }
0038 
0039 QString MyMoneyKeyValueContainer::value(const QString& key) const
0040 {
0041     Q_D(const MyMoneyKeyValueContainer);
0042     QMap<QString, QString>::ConstIterator it;
0043 
0044     it = d->m_kvp.find(key);
0045     if (it != d->m_kvp.end())
0046         return (*it);
0047     return *nullString;
0048 }
0049 
0050 void MyMoneyKeyValueContainer::setValue(const QString& key, const QString& value)
0051 {
0052     Q_D(MyMoneyKeyValueContainer);
0053     d->m_kvp[key] = value;
0054 }
0055 
0056 QMap<QString, QString> MyMoneyKeyValueContainer::pairs() const
0057 {
0058     Q_D(const MyMoneyKeyValueContainer);
0059     return d->m_kvp;
0060 }
0061 
0062 void MyMoneyKeyValueContainer::setPairs(const QMap<QString, QString>& list)
0063 {
0064     Q_D(MyMoneyKeyValueContainer);
0065     d->m_kvp = list;
0066 }
0067 
0068 void MyMoneyKeyValueContainer::deletePair(const QString& key)
0069 {
0070     Q_D(MyMoneyKeyValueContainer);
0071     QMap<QString, QString>::Iterator it;
0072 
0073     it = d->m_kvp.find(key);
0074     if (it != d->m_kvp.end())
0075         d->m_kvp.erase(it);
0076 }
0077 
0078 void MyMoneyKeyValueContainer::clear()
0079 {
0080     Q_D(MyMoneyKeyValueContainer);
0081     d->m_kvp.clear();
0082 }
0083 
0084 bool MyMoneyKeyValueContainer::operator == (const MyMoneyKeyValueContainer& right) const
0085 {
0086     Q_D(const MyMoneyKeyValueContainer);
0087     QMap<QString, QString>::ConstIterator it_a, it_b;
0088 
0089     auto d2 = static_cast<const MyMoneyKeyValueContainerPrivate *>(right.d_func());
0090     it_a = d->m_kvp.begin();
0091     it_b = d2->m_kvp.begin();
0092 
0093     while (it_a != d->m_kvp.end() && it_b != d2->m_kvp.end()) {
0094         if (it_a.key() != it_b.key()
0095                 || (((*it_a).length() != 0 || (*it_b).length() != 0) && *it_a != *it_b))
0096             return false;
0097         ++it_a;
0098         ++it_b;
0099     }
0100 
0101     return (it_a == d->m_kvp.end() && it_b == d2->m_kvp.end());
0102 }
0103 
0104 
0105 QString MyMoneyKeyValueContainer::operator[](const QString& k) const
0106 {
0107     return value(k);
0108 }
0109 
0110 QString& MyMoneyKeyValueContainer::operator[](const QString& k)
0111 {
0112     Q_D(MyMoneyKeyValueContainer);
0113     return d->m_kvp[k];
0114 }