Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qtimezoneprivate_tz.cpp File Reference

(bd01008bca729f2e935af739e2f8287633abde2b)

#include "qtimezone.h"
#include "qtimezoneprivate_p.h"
#include "private/qlocale_tools_p.h"
#include "private/qlocking_p.h"
#include <QtCore/QDataStream>
#include <QtCore/QDateTime>
#include <QtCore/QDirListing>
#include <QtCore/QFile>
#include <QtCore/QCache>
#include <QtCore/QMap>
#include <QtCore/QMutex>
#include <qdebug.h>
#include <qplatformdefs.h>
#include <algorithm>
#include <memory>
#include <errno.h>
#include <limits.h>
#include <sys/param.h>
#include <unistd.h>
+ Include dependency graph for qtimezoneprivate_tz.cpp:

Go to the source code of this file.

Classes

struct  QTzTimeZone
 
struct  QTzHeader
 
struct  QTzTransition
 
struct  QTzType
 
class  QTzTimeZoneCache
 

Macros

#define TZ_MAGIC   "TZif"
 
#define TZ_MAX_TIMES   1200
 
#define TZ_MAX_TYPES   256
 
#define TZ_MAX_CHARS   50
 
#define TZ_MAX_LEAPS   50
 

Typedefs

typedef QHash< QByteArray, QTzTimeZoneQTzTimeZoneHash
 

Functions

static bool isTzFile (const QString &name)
 
static bool openZoneInfo (const QString &name, QFile *file)
 
static QTzTimeZoneHash loadTzTimeZones ()
 
 Q_GLOBAL_STATIC (const QTzTimeZoneHash, tzZones, loadTzTimeZones())
 
 Q_DECLARE_TYPEINFO (QTzTransition, Q_PRIMITIVE_TYPE)
 
 Q_DECLARE_TYPEINFO (QTzType, Q_PRIMITIVE_TYPE)
 
static QTzHeader parseTzHeader (QDataStream &ds, bool *ok)
 
static QList< QTzTransitionparseTzTransitions (QDataStream &ds, int tzh_timecnt, bool longTran)
 
static QList< QTzTypeparseTzTypes (QDataStream &ds, int tzh_typecnt)
 
static QMap< int, QByteArrayparseTzAbbreviations (QDataStream &ds, int tzh_charcnt, const QList< QTzType > &types)
 
static void parseTzLeapSeconds (QDataStream &ds, int tzh_leapcnt, bool longTran)
 
static QList< QTzTypeparseTzIndicators (QDataStream &ds, const QList< QTzType > &types, int tzh_ttisstdcnt, int tzh_ttisgmtcnt)
 
static QByteArray parseTzPosixRule (QDataStream &ds)
 
static QDate calculateDowDate (int year, int month, int dayOfWeek, int week)
 
static QDate calculatePosixDate (const QByteArray &dateRule, int year)
 
static int parsePosixTime (const char *begin, const char *end)
 
static int parsePosixTransitionTime (const QByteArray &timeRule)
 
static int parsePosixOffset (const char *begin, const char *end)
 
static bool asciiIsLetter (char ch)
 
static auto validatePosixRule (const QByteArray &posixRule, bool requireOffset=false)
 
static QList< QTimeZonePrivate::DatacalculatePosixTransitions (const QByteArray &posixRule, int startYear, int endYear, qint64 lastTranMSecs)
 

Macro Definition Documentation

◆ TZ_MAGIC

#define TZ_MAGIC   "TZif"

Definition at line 148 of file qtimezoneprivate_tz.cpp.

Referenced by isTzFile(), and parseTzHeader().

◆ TZ_MAX_CHARS

#define TZ_MAX_CHARS   50

Definition at line 151 of file qtimezoneprivate_tz.cpp.

Referenced by parseTzHeader().

◆ TZ_MAX_LEAPS

#define TZ_MAX_LEAPS   50

Definition at line 152 of file qtimezoneprivate_tz.cpp.

Referenced by parseTzHeader().

◆ TZ_MAX_TIMES

#define TZ_MAX_TIMES   1200

Definition at line 149 of file qtimezoneprivate_tz.cpp.

Referenced by parseTzHeader().

◆ TZ_MAX_TYPES

#define TZ_MAX_TYPES   256

Definition at line 150 of file qtimezoneprivate_tz.cpp.

Referenced by parseTzHeader().

Typedef Documentation

◆ QTzTimeZoneHash

Definition at line 48 of file qtimezoneprivate_tz.cpp.

Function Documentation

◆ asciiIsLetter()

static bool asciiIsLetter ( char ch)
inlinestatic

Definition at line 505 of file qtimezoneprivate_tz.cpp.

References ch.

◆ calculateDowDate()

static QDate calculateDowDate ( int year,
int month,
int dayOfWeek,
int week )
static

Definition at line 387 of file qtimezoneprivate_tz.cpp.

References QDate::addDays(), date, QDate::dayOfWeek(), and QDate::month().

Referenced by calculatePosixDate().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ calculatePosixDate()

static QDate calculatePosixDate ( const QByteArray & dateRule,
int year )
static

Definition at line 406 of file qtimezoneprivate_tz.cpp.

References QDate::addDays(), QByteArrayView::at(), calculateDowDate(), QDate::isLeapYear(), ok, Q_ASSERT, and QByteArrayView::sliced().

Referenced by calculatePosixTransitions(), and validatePosixRule().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ calculatePosixTransitions()

static QList< QTimeZonePrivate::Data > calculatePosixTransitions ( const QByteArray & posixRule,
int startYear,
int endYear,
qint64 lastTranMSecs )
static

Definition at line 640 of file qtimezoneprivate_tz.cpp.

References QByteArray::at(), begin(), calculatePosixDate(), QDateTime::First, QString::fromUtf8(), QDateTime::Last, parsePosixTransitionTime(), Q_ASSERT, qBound(), and QTimeZone::UTC.

+ Here is the call graph for this function:

◆ isTzFile()

static bool isTzFile ( const QString & name)
static

Definition at line 179 of file qtimezoneprivate_tz.cpp.

References file, QFile::open(), QIODevice::read(), QIODeviceBase::ReadOnly, and TZ_MAGIC.

Referenced by loadTzTimeZones().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ loadTzTimeZones()

static QTzTimeZoneHash loadTzTimeZones ( )
static

Definition at line 83 of file qtimezoneprivate_tz.cpp.

References QString::at(), QLocalePrivate::codeToTerritory(), cut(), QFile::encodeName(), QString::first(), QString::fromUtf8(), QString::indexOf(), info, QString::insert(), QString::isEmpty(), isTzFile(), line, openZoneInfo(), Q_ASSERT, Q_LIKELY, QDirListing::Recursive, QString::sliced(), QTzTimeZone::territory, text, and QString::trimmed().

+ Here is the call graph for this function:

◆ openZoneInfo()

static bool openZoneInfo ( const QString & name,
QFile * file )
static

Definition at line 53 of file qtimezoneprivate_tz.cpp.

References file, QFile::open(), qEnvironmentVariable(), QIODeviceBase::ReadOnly, and QFile::setFileName().

Referenced by loadTzTimeZones().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ parsePosixOffset()

static int parsePosixOffset ( const char * begin,
const char * end )
static

Definition at line 487 of file qtimezoneprivate_tz.cpp.

References begin(), and parsePosixTime().

+ Here is the call graph for this function:

◆ parsePosixTime()

static int parsePosixTime ( const char * begin,
const char * end )
static

Definition at line 444 of file qtimezoneprivate_tz.cpp.

References begin(), and qstrntoll().

Referenced by parsePosixOffset(), parsePosixTransitionTime(), and validatePosixRule().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ parsePosixTransitionTime()

static int parsePosixTransitionTime ( const QByteArray & timeRule)
static

Definition at line 482 of file qtimezoneprivate_tz.cpp.

References parsePosixTime().

Referenced by calculatePosixTransitions().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ parseTzAbbreviations()

static QMap< int, QByteArray > parseTzAbbreviations ( QDataStream & ds,
int tzh_charcnt,
const QList< QTzType > & types )
static

Definition at line 286 of file qtimezoneprivate_tz.cpp.

References QByteArray::append(), ch, i, map, and QDataStream::status().

+ Here is the call graph for this function:

◆ parseTzHeader()

static QTzHeader parseTzHeader ( QDataStream & ds,
bool * ok )
static

◆ parseTzIndicators()

static QList< QTzType > parseTzIndicators ( QDataStream & ds,
const QList< QTzType > & types,
int tzh_ttisstdcnt,
int tzh_ttisgmtcnt )
static

Definition at line 342 of file qtimezoneprivate_tz.cpp.

References i, and QDataStream::status().

+ Here is the call graph for this function:

◆ parseTzLeapSeconds()

static void parseTzLeapSeconds ( QDataStream & ds,
int tzh_leapcnt,
bool longTran )
static

Definition at line 315 of file qtimezoneprivate_tz.cpp.

References i, QDataStream::status(), and time.

+ Here is the call graph for this function:

◆ parseTzPosixRule()

static QByteArray parseTzPosixRule ( QDataStream & ds)
static

Definition at line 369 of file qtimezoneprivate_tz.cpp.

References ch, rule, and QDataStream::status().

+ Here is the call graph for this function:

◆ parseTzTransitions()

static QList< QTzTransition > parseTzTransitions ( QDataStream & ds,
int tzh_timecnt,
bool longTran )
static

Definition at line 231 of file qtimezoneprivate_tz.cpp.

References i, and QDataStream::status().

+ Here is the call graph for this function:

◆ parseTzTypes()

static QList< QTzType > parseTzTypes ( QDataStream & ds,
int tzh_typecnt )
static

Definition at line 264 of file qtimezoneprivate_tz.cpp.

References i, and QDataStream::status().

+ Here is the call graph for this function:

◆ Q_DECLARE_TYPEINFO() [1/2]

Q_DECLARE_TYPEINFO ( QTzTransition ,
Q_PRIMITIVE_TYPE  )

◆ Q_DECLARE_TYPEINFO() [2/2]

Q_DECLARE_TYPEINFO ( QTzType ,
Q_PRIMITIVE_TYPE  )

◆ Q_GLOBAL_STATIC()

Q_GLOBAL_STATIC ( const QTzTimeZoneHash ,
tzZones ,
loadTzTimeZones()  )

◆ validatePosixRule()

static auto validatePosixRule ( const QByteArray & posixRule,
bool requireOffset = false )
static

Definition at line 592 of file qtimezoneprivate_tz.cpp.

References QByteArray::at(), begin(), calculatePosixDate(), i, parsePosixTime(), and time.

+ Here is the call graph for this function: