1 /*
2  * Copyright 2002-2011  Thomas Baumgart <tbaumgart@kde.org>
3  * Copyright 2017-2018  Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com>
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License as
7  * published by the Free Software Foundation; either version 2 of
8  * the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  */
18 
19 #include "mymoneykeyvaluecontainer.h"
20 #include "mymoneykeyvaluecontainer_p.h"
21 
22 // ----------------------------------------------------------------------------
23 // QT Includes
24 
25 // ----------------------------------------------------------------------------
26 // KDE Includes
27 
28 // ----------------------------------------------------------------------------
29 // Project Includes
30 
31 #include "mymoneyexception.h"
32 
Q_GLOBAL_STATIC(QString,nullString)33 Q_GLOBAL_STATIC(QString, nullString)
34 
35 MyMoneyKeyValueContainer::MyMoneyKeyValueContainer() :
36   d_ptr(new MyMoneyKeyValueContainerPrivate)
37 {
38 }
39 
MyMoneyKeyValueContainer(const MyMoneyKeyValueContainer & other)40 MyMoneyKeyValueContainer::MyMoneyKeyValueContainer(const MyMoneyKeyValueContainer& other) :
41   d_ptr(new MyMoneyKeyValueContainerPrivate(*other.d_func()))
42 {
43 }
44 
~MyMoneyKeyValueContainer()45 MyMoneyKeyValueContainer::~MyMoneyKeyValueContainer()
46 {
47   Q_D(MyMoneyKeyValueContainer);
48   delete d;
49 }
50 
value(const QString & key) const51 QString MyMoneyKeyValueContainer::value(const QString& key) const
52 {
53   Q_D(const MyMoneyKeyValueContainer);
54   QMap<QString, QString>::ConstIterator it;
55 
56   it = d->m_kvp.find(key);
57   if (it != d->m_kvp.end())
58     return (*it);
59   return *nullString;
60 }
61 
setValue(const QString & key,const QString & value)62 void MyMoneyKeyValueContainer::setValue(const QString& key, const QString& value)
63 {
64   Q_D(MyMoneyKeyValueContainer);
65   d->m_kvp[key] = value;
66 }
67 
pairs() const68 QMap<QString, QString> MyMoneyKeyValueContainer::pairs() const
69 {
70   Q_D(const MyMoneyKeyValueContainer);
71   return d->m_kvp;
72 }
73 
setPairs(const QMap<QString,QString> & list)74 void MyMoneyKeyValueContainer::setPairs(const QMap<QString, QString>& list)
75 {
76   Q_D(MyMoneyKeyValueContainer);
77   d->m_kvp = list;
78 }
79 
deletePair(const QString & key)80 void MyMoneyKeyValueContainer::deletePair(const QString& key)
81 {
82   Q_D(MyMoneyKeyValueContainer);
83   QMap<QString, QString>::Iterator it;
84 
85   it = d->m_kvp.find(key);
86   if (it != d->m_kvp.end())
87     d->m_kvp.erase(it);
88 }
89 
clear()90 void MyMoneyKeyValueContainer::clear()
91 {
92   Q_D(MyMoneyKeyValueContainer);
93   d->m_kvp.clear();
94 }
95 
operator ==(const MyMoneyKeyValueContainer & right) const96 bool MyMoneyKeyValueContainer::operator == (const MyMoneyKeyValueContainer& right) const
97 {
98   Q_D(const MyMoneyKeyValueContainer);
99   QMap<QString, QString>::ConstIterator it_a, it_b;
100 
101   auto d2 = static_cast<const MyMoneyKeyValueContainerPrivate *>(right.d_func());
102   it_a = d->m_kvp.begin();
103   it_b = d2->m_kvp.begin();
104 
105   while (it_a != d->m_kvp.end() && it_b != d2->m_kvp.end()) {
106     if (it_a.key() != it_b.key()
107         || (((*it_a).length() != 0 || (*it_b).length() != 0) && *it_a != *it_b))
108       return false;
109     ++it_a;
110     ++it_b;
111   }
112 
113   return (it_a == d->m_kvp.end() && it_b == d2->m_kvp.end());
114 }
115 
116 
operator [](const QString & k) const117 QString MyMoneyKeyValueContainer::operator[](const QString& k) const
118 {
119   return value(k);
120 }
121 
operator [](const QString & k)122 QString& MyMoneyKeyValueContainer::operator[](const QString& k)
123 {
124   Q_D(MyMoneyKeyValueContainer);
125   return d->m_kvp[k];
126 }
127