File indexing completed on 2024-04-28 15:40:25

0001 // SPDX-FileCopyrightText: 2020 the KPhotoAlbum Development Team
0002 // SPDX-FileCopyrightText: 2022 - 2023 Johannes Zarl-Zierl <johannes@zarl-zierl.at>
0003 //
0004 // SPDX-License-Identifier: GPL-2.0-or-later
0005 
0006 #include "FastDateTime.h"
0007 
0008 namespace
0009 {
0010 static inline qint64 toValidatedMSecs(const QDateTime &dateTime)
0011 {
0012     return dateTime.isValid() ? dateTime.toMSecsSinceEpoch() : INT64_MIN;
0013 }
0014 }
0015 
0016 Utilities::FastDateTime::FastDateTime()
0017     : m_dateTime()
0018     , m_msecsSinceEpoch(toValidatedMSecs(m_dateTime))
0019 {
0020 }
0021 
0022 Utilities::FastDateTime::FastDateTime(const QDate &d, const QTime &t,
0023                                       Qt::TimeSpec spec)
0024     : m_dateTime(d, t, spec)
0025     , m_msecsSinceEpoch(toValidatedMSecs(m_dateTime))
0026 {
0027 }
0028 
0029 Utilities::FastDateTime::FastDateTime(const QDate &d)
0030     : m_dateTime(d.startOfDay())
0031     , m_msecsSinceEpoch(toValidatedMSecs(m_dateTime))
0032 {
0033 }
0034 
0035 Utilities::FastDateTime::FastDateTime(const QDateTime &other)
0036     : m_dateTime(other)
0037     , m_msecsSinceEpoch(toValidatedMSecs(m_dateTime))
0038 {
0039 }
0040 
0041 Utilities::FastDateTime
0042 Utilities::FastDateTime::addDays(qint64 days) const
0043 {
0044     FastDateTime answer(*this);
0045     answer.m_dateTime = answer.m_dateTime.addDays(days);
0046     answer.m_msecsSinceEpoch = toValidatedMSecs(answer.m_dateTime);
0047     return answer;
0048 }
0049 
0050 Utilities::FastDateTime
0051 Utilities::FastDateTime::addMonths(qint64 months) const
0052 {
0053     FastDateTime answer(*this);
0054     answer.m_dateTime = answer.m_dateTime.addMonths(months);
0055     answer.m_msecsSinceEpoch = toValidatedMSecs(answer.m_dateTime);
0056     return answer;
0057 }
0058 
0059 Utilities::FastDateTime
0060 Utilities::FastDateTime::addYears(qint64 years) const
0061 {
0062     FastDateTime answer(*this);
0063     answer.m_dateTime = answer.m_dateTime.addYears(years);
0064     answer.m_msecsSinceEpoch = toValidatedMSecs(answer.m_dateTime);
0065     return answer;
0066 }
0067 
0068 Utilities::FastDateTime
0069 Utilities::FastDateTime::addSecs(qint64 secs) const
0070 {
0071     FastDateTime answer(*this);
0072     answer.m_dateTime = answer.m_dateTime.addSecs(secs);
0073     answer.m_msecsSinceEpoch = toValidatedMSecs(answer.m_dateTime);
0074     return answer;
0075 }
0076 
0077 Utilities::FastDateTime
0078 Utilities::FastDateTime::currentDateTime()
0079 {
0080     QDateTime answer(QDateTime::currentDateTime());
0081     return FastDateTime(answer);
0082 }
0083 
0084 Utilities::FastDateTime
0085 Utilities::FastDateTime::fromString(const QString &s, Qt::DateFormat f)
0086 {
0087     QDateTime answer(QDateTime::fromString(s, f));
0088     return FastDateTime(answer);
0089 }
0090 
0091 QDebug operator<<(QDebug debug, const Utilities::FastDateTime &d)
0092 {
0093     QDebugStateSaver saveState(debug);
0094     if (d.isNull()) {
0095         debug.nospace() << "Utilities::FastDateTime()";
0096     } else {
0097         debug.nospace() << "Utilities::FastDateTime(" << d.toString(Qt::ISODate) << ")";
0098     }
0099     return debug;
0100 }