File indexing completed on 2023-10-03 08:24:26
0001 /* 0002 SPDX-FileCopyrightText: 2006-2007 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 /** 0007 @file 0008 This file is part of the API for handling @ref MIME data and 0009 defines the ContentIndex class. 0010 0011 @brief 0012 Defines the ContentIndex class. 0013 0014 @authors Volker Krause \<vkrause@kde.org\> 0015 */ 0016 0017 #include "kmime_contentindex.h" 0018 0019 #include <QHash> 0020 #include <QSharedData> 0021 #include <QStringList> 0022 #include <QVector> 0023 0024 using namespace KMime; 0025 0026 class ContentIndex::Private : public QSharedData 0027 { 0028 public: 0029 Private() = default; 0030 Private(const Private &other) : QSharedData(other) { index = other.index; } 0031 0032 QVector<unsigned int> index; 0033 }; 0034 0035 KMime::ContentIndex::ContentIndex() : d(new Private) 0036 { 0037 } 0038 0039 KMime::ContentIndex::ContentIndex(const QString &index) : d(new Private) 0040 { 0041 const QStringList l = index.split(QLatin1Char('.')); 0042 for (const QString &s : l) { 0043 bool ok; 0044 unsigned int i = s.toUInt(&ok); 0045 if (!ok) { 0046 d->index.clear(); 0047 break; 0048 } 0049 d->index.append(i); 0050 } 0051 } 0052 0053 ContentIndex::ContentIndex(const ContentIndex &other) = default; 0054 0055 ContentIndex::~ContentIndex() = default; 0056 0057 bool KMime::ContentIndex::isValid() const 0058 { 0059 return !d->index.isEmpty(); 0060 } 0061 0062 unsigned int KMime::ContentIndex::pop() 0063 { 0064 return d->index.takeFirst(); 0065 } 0066 0067 void KMime::ContentIndex::push(unsigned int index) 0068 { 0069 d->index.prepend(index); 0070 } 0071 0072 unsigned int ContentIndex::up() 0073 { 0074 return d->index.takeLast(); 0075 } 0076 0077 QString KMime::ContentIndex::toString() const 0078 { 0079 QStringList l; 0080 l.reserve(d->index.count()); 0081 for (unsigned int i : std::as_const(d->index)) { 0082 l.append(QString::number(i)); 0083 } 0084 return l.join(QLatin1Char('.')); 0085 } 0086 0087 bool KMime::ContentIndex::operator ==(const ContentIndex &index) const 0088 { 0089 return d->index == index.d->index; 0090 } 0091 0092 bool KMime::ContentIndex::operator !=(const ContentIndex &index) const 0093 { 0094 return d->index != index.d->index; 0095 } 0096 0097 ContentIndex &ContentIndex::operator =(const ContentIndex &other) 0098 { 0099 if (this != &other) { 0100 d = other.d; 0101 } 0102 return *this; 0103 } 0104 0105 uint KMime::qHash(const KMime::ContentIndex &index) 0106 { 0107 return qHash(index.toString()); 0108 }