[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdelibs/kdecore
From:       David Jarvie <software () astrojar ! org ! uk>
Date:       2006-07-31 20:05:11
Message-ID: 1154376311.950218.10938.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 568323 by djarvie:

Move more methods into the base KTimeZoneData class


 M  +37 -10    ktimezones.cpp  
 M  +8 -56     ktzfiletimezone.cpp  
 M  +0 -14     ktzfiletimezone.h  


--- trunk/KDE/kdelibs/kdecore/ktimezones.cpp #568322:568323
@@ -803,6 +803,8 @@
     public:
         QList<KTimeZonePhase> phases;
         QList<KTimeZoneLeapSeconds> leapChanges;
+	QList<int>        utcOffsets;
+	QList<QByteArray> abbreviations;
 };
 
 
@@ -814,8 +816,10 @@
 KTimeZoneData::KTimeZoneData(const KTimeZoneData &c)
   : d(new KTimeZoneDataPrivate)
 {
-    d->phases      = c.d->phases;
-    d->leapChanges = c.d->leapChanges;
+    d->phases        = c.d->phases;
+    d->leapChanges   = c.d->leapChanges;
+    d->utcOffsets    = c.d->utcOffsets;
+    d->abbreviations = c.d->abbreviations;
 }
 
 KTimeZoneData::~KTimeZoneData()
@@ -825,8 +829,10 @@
 
 KTimeZoneData &KTimeZoneData::operator=(const KTimeZoneData &c)
 {
-    d->phases      = c.d->phases;
-    d->leapChanges = c.d->leapChanges;
+    d->phases        = c.d->phases;
+    d->leapChanges   = c.d->leapChanges;
+    d->utcOffsets    = c.d->utcOffsets;
+    d->abbreviations = c.d->abbreviations;
     return *this;
 }
 
@@ -837,9 +843,19 @@
 
 QList<QByteArray> KTimeZoneData::abbreviations() const
 {
-    QList<QByteArray> abbrs;
-    abbrs.append("UTC");
-    return abbrs;
+    if (d->abbreviations.isEmpty())
+    {
+        for (int i = 0, end = d->phases.count();  i < end;  ++i)
+	{
+            QList<QByteArray> abbrevs = d->phases[i].abbreviations();
+            for (int j = 0, jend = abbrevs.count();  j < jend;  ++j)
+                if (d->abbreviations.indexOf(abbrevs[j]) < 0)
+                    d->abbreviations.append(abbrevs[j]);
+        }
+        if (d->abbreviations.isEmpty())
+            d->abbreviations += "UTC";
+    }
+    return d->abbreviations;
 }
 
 QByteArray KTimeZoneData::abbreviation(const QDateTime &utcDateTime) const
@@ -857,9 +873,20 @@
 
 QList<int> KTimeZoneData::utcOffsets() const
 {
-    QList<int> offsets;
-    offsets.append(0);
-    return offsets;
+    if (d->utcOffsets.isEmpty())
+    {
+        for (int i = 0, end = d->phases.count();  i < end;  ++i)
+	{
+            int offset = d->phases[i].utcOffset();
+            if (d->utcOffsets.indexOf(offset) < 0)
+                d->utcOffsets.append(offset);
+        }
+        if (d->utcOffsets.isEmpty())
+            d->utcOffsets += 0;
+        else
+            qSort(d->utcOffsets);
+    }
+    return d->utcOffsets;
 }
 
 QList<KTimeZonePhase> KTimeZoneData::phases() const
--- trunk/KDE/kdelibs/kdecore/ktzfiletimezone.cpp #568322:568323
@@ -58,33 +58,27 @@
 class KTzfileTimeZoneDataPrivate
 {
 public:
-    QList<QByteArray> abbreviations;
-    QList<int>        utcOffsets;
 };
 
 
 KTzfileTimeZoneData::KTzfileTimeZoneData()
-  : d(new KTzfileTimeZoneDataPrivate)
+//  : d(new KTzfileTimeZoneDataPrivate)
 { }
 
 KTzfileTimeZoneData::KTzfileTimeZoneData(const KTzfileTimeZoneData &rhs)
-  : KTimeZoneData(rhs),
-    d(new KTzfileTimeZoneDataPrivate)
+  : KTimeZoneData(rhs)
+//    d(new KTzfileTimeZoneDataPrivate)
 {
-    operator=(rhs);
-    d->utcOffsets = rhs.d->utcOffsets;
 }
 
 KTzfileTimeZoneData::~KTzfileTimeZoneData()
 {
-    delete d;
+//    delete d;
 }
 
 KTzfileTimeZoneData &KTzfileTimeZoneData::operator=(const KTzfileTimeZoneData &rhs)
 {
     KTimeZoneData::operator=(rhs);
-    d->abbreviations = rhs.d->abbreviations;
-    d->utcOffsets    = rhs.d->utcOffsets;
     return *this;
 }
 
@@ -93,17 +87,7 @@
     return new KTzfileTimeZoneData(*this);
 }
 
-QList<QByteArray> KTzfileTimeZoneData::abbreviations() const
-{
-    return d->abbreviations;
-}
 
-QList<int> KTzfileTimeZoneData::utcOffsets() const
-{
-    return d->utcOffsets;
-}
-
-
 /******************************************************************************/
 
 class KTzfileTimeZoneSourcePrivate
@@ -209,14 +193,10 @@
         str >> is;
         ltt->isdst = (is != 0);
         str >> ltt->abbrIndex;
-        // Add the UTC offset to the complete list of UTC offsets
-        if (data->d->utcOffsets.indexOf(ltt->gmtoff) < 0)
-            data->d->utcOffsets.append(ltt->gmtoff);
         // kDebug() << "local type: " << ltt->gmtoff << ", " << is << ", " << ltt->abbrIndex << endl;
         ltt->isstd = false;   // default if no data
         ltt->isutc = false;   // default if no data
     }
-    qSort(data->d->utcOffsets);
 
     // Read the timezone abbreviations. They are stored as null terminated strings in
     // a character array.
@@ -240,9 +220,10 @@
         return 0;
     }
     quint8 n = 0;
+    QList<QByteArray> abbreviations;
     for (i = 0;  i < abbrCharCount;  ++n, i += strlen(abbrs + i) + 1)
     {
-	data->d->abbreviations += QByteArray(abbrs + i);
+	abbreviations += QByteArray(abbrs + i);
         // Convert the LocalTimeTypes pointer to a sequential index
         ltt = localTimeTypes;
         for (unsigned j = 0;  j < nLocalTimeTypes;  ++ltt, ++j)
@@ -341,13 +322,13 @@
     ltt = localTimeTypes;
     for (i = 0;  i < nLocalTimeTypes;  ++ltt, ++i)
     {
-        if (ltt->abbrIndex >= data->d->abbreviations.count())
+        if (ltt->abbrIndex >= abbreviations.count())
         {
             kError() << "KTzfileTimeZoneSource::parse(): abbreviation index out of range" << endl;
             abbrev = "???";
         }
         else
-            abbrev = data->d->abbreviations[ltt->abbrIndex];
+            abbrev = abbreviations[ltt->abbrIndex];
         phases += KTimeZonePhase(timeLists[i], ltt->gmtoff, abbrev, ltt->isdst);
     }
     delete[] localTimeTypes;
@@ -355,32 +336,3 @@
 
     return data;
 }
-
-#if 0
-00518   *leap_correct = 0L;
-00519   *leap_hit = 0;
-00520 
-00521   /* Find the last leap second correction transition time before TIMER.  */
-00522   i = num_leaps;
-00523   do
-00524     if (i-- == 0)
-00525       return;
-00526   while (timer < leaps[i].transition);
-00527 
-00528   /* Apply its correction.  */
-00529   *leap_correct = leaps[i].change;
-00530 
-00531   if (timer == leaps[i].transition && /* Exactly at the transition time.  */
-00532       ((i == 0 && leaps[i].change > 0) ||
-00533        leaps[i].change > leaps[i - 1].change))
-00534     {
-00535       *leap_hit = 1;
-00536       while (i > 0
-00537              && leaps[i].transition == leaps[i - 1].transition + 1
-00538              && leaps[i].change == leaps[i - 1].change + 1)
-00539         {
-00540           ++*leap_hit;
-00541           --i;
-00542         }
-00543     }
-#endif
--- trunk/KDE/kdelibs/kdecore/ktzfiletimezone.h #568322:568323
@@ -145,20 +145,6 @@
      */
     virtual KTimeZoneData *clone();
 
-    /**
-     * Returns the complete list of time zone abbreviations.
-     *
-     * @return the list of abbreviations
-     */
-    virtual QList<QByteArray> abbreviations() const;
-
-    /**
-     * Returns the complete list of UTC offsets for the time zone.
-     *
-     * @return the sorted list of UTC offsets
-     */
-    virtual QList<int> utcOffsets() const;
-
 private:
     KTzfileTimeZoneDataPrivate *d;
 };
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic