22 #include <QtCore/QSharedData>
24 using namespace KIMAP;
26 class ImapInterval::Private :
public QSharedData
35 Private(
const Private &other ) :
46 class ImapSet::Private :
public QSharedData
49 Private() : QSharedData() {}
50 Private(
const Private &other ) :
83 if (
this != & other )
90 return ( d->begin == other.d->begin && d->end == other.d->end );
95 if ( !d->begin && !d->end )
97 if ( d->begin && !d->end )
98 return Q_INT64_C( 0x7FFFFFFFFFFFFFFF ) - d->begin + 1;
99 return d->end - d->begin + 1;
104 return d->begin != 0;
126 Q_ASSERT( value >= 0 );
133 Q_ASSERT( value >= 0 );
143 return QByteArray::number( d->begin );
145 rv += QByteArray::number( d->begin ) +
':';
147 rv += QByteArray::number( d->end );
155 QList<QByteArray> values = sequence.split(
':' );
156 if ( values.isEmpty() || values.size() > 2 ) {
161 Id begin = values[0].toLongLong(&ok);
169 if ( values.size() == 1 ) {
171 }
else if ( values[1] == QByteArray(
"*" ) ) {
175 end = values[1].toLongLong(&ok);
198 add( QList<Id>() << value );
212 if (
this != &other )
219 if ( d->intervals.size()!=other.d->intervals.size() ) {
223 foreach (
const ImapInterval &interval, d->intervals ) {
224 if ( !other.d->intervals.contains( interval ) ) {
234 add( QList<Id>() << value );
239 QList<Id> vals = values;
241 for(
int i = 0; i < vals.count(); ++i ) {
242 const int begin = vals[i];
243 Q_ASSERT( begin >= 0 );
244 if ( i == vals.count() - 1 ) {
250 Q_ASSERT( vals[i] >= 0 );
251 if ( vals[i] != (vals[i - 1] + 1) ) {
255 }
while ( i < vals.count() - 1 );
262 d->intervals << interval;
267 QList<QByteArray> rv;
268 foreach (
const ImapInterval &interval, d->intervals ) {
274 if ( !rv.isEmpty() ) {
276 QList<QByteArray>::ConstIterator it = rv.constBegin();
278 for ( ; it != rv.constEnd(); ++it ) {
279 result +=
',' + (*it);
290 QList<QByteArray>
intervals = sequence.split(
',' );
292 foreach(
const QByteArray &interval, intervals ) {
293 if ( !interval.isEmpty() ) {
308 return d->intervals.isEmpty();
311 QDebug& operator<<( QDebug &d,
const ImapInterval &interval )
317 QDebug& operator<<( QDebug &d,
const ImapSet &
set )
319 d <<
set.toImapSequenceSet();