~oif-team/ubuntu/natty/qt4-x11/xi2.1

« back to all changes in this revision

Viewing changes to src/3rdparty/webkit/JavaScriptCore/runtime/DateMath.h

  • Committer: Bazaar Package Importer
  • Author(s): Alessandro Ghersi
  • Date: 2009-11-02 18:30:08 UTC
  • mfrom: (1.2.2 upstream)
  • mto: (15.2.5 experimental)
  • mto: This revision was merged to the branch mainline in revision 88.
  • Revision ID: james.westby@ubuntu.com-20091102183008-b6a4gcs128mvfb3m
Tags: upstream-4.6.0~beta1
ImportĀ upstreamĀ versionĀ 4.6.0~beta1

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
3
 
 * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
4
 
 *
5
 
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
6
 
 *
7
 
 * The contents of this file are subject to the Mozilla Public License Version
8
 
 * 1.1 (the "License"); you may not use this file except in compliance with
9
 
 * the License. You may obtain a copy of the License at
10
 
 * http://www.mozilla.org/MPL/
11
 
 *
12
 
 * Software distributed under the License is distributed on an "AS IS" basis,
13
 
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
14
 
 * for the specific language governing rights and limitations under the
15
 
 * License.
16
 
 *
17
 
 * The Original Code is Mozilla Communicator client code, released
18
 
 * March 31, 1998.
19
 
 *
20
 
 * The Initial Developer of the Original Code is
21
 
 * Netscape Communications Corporation.
22
 
 * Portions created by the Initial Developer are Copyright (C) 1998
23
 
 * the Initial Developer. All Rights Reserved.
24
 
 *
25
 
 * Contributor(s):
26
 
 *
27
 
 * Alternatively, the contents of this file may be used under the terms of
28
 
 * either of the GNU General Public License Version 2 or later (the "GPL"),
29
 
 * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
30
 
 * in which case the provisions of the GPL or the LGPL are applicable instead
31
 
 * of those above. If you wish to allow use of your version of this file only
32
 
 * under the terms of either the GPL or the LGPL, and not to allow others to
33
 
 * use your version of this file under the terms of the MPL, indicate your
34
 
 * decision by deleting the provisions above and replace them with the notice
35
 
 * and other provisions required by the GPL or the LGPL. If you do not delete
36
 
 * the provisions above, a recipient may use your version of this file under
37
 
 * the terms of any one of the MPL, the GPL or the LGPL.
38
 
 *
39
 
 */
40
 
 
41
 
#ifndef DateMath_h
42
 
#define DateMath_h
43
 
 
44
 
#include <time.h>
45
 
#include <string.h>
46
 
#include <wtf/Noncopyable.h>
47
 
 
48
 
namespace JSC {
49
 
 
50
 
class UString;
51
 
struct GregorianDateTime;
52
 
 
53
 
void initDateMath();
54
 
void msToGregorianDateTime(double, bool outputIsUTC, GregorianDateTime&);
55
 
double gregorianDateTimeToMS(const GregorianDateTime&, double, bool inputIsUTC);
56
 
double getUTCOffset();
57
 
int equivalentYearForDST(int year);
58
 
double getCurrentUTCTime();
59
 
double getCurrentUTCTimeWithMicroseconds();
60
 
void getLocalTime(const time_t*, tm*);
61
 
 
62
 
// Not really math related, but this is currently the only shared place to put these.  
63
 
double parseDate(const UString&);
64
 
double timeClip(double);
65
 
UString formatDate(const GregorianDateTime&);
66
 
UString formatDateUTCVariant(const GregorianDateTime&);
67
 
UString formatTime(const GregorianDateTime&, bool inputIsUTC);
68
 
 
69
 
 
70
 
const char * const weekdayName[7] = { "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" };
71
 
const char * const monthName[12] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
72
 
 
73
 
const double hoursPerDay = 24.0;
74
 
const double minutesPerHour = 60.0;
75
 
const double secondsPerHour = 60.0 * 60.0;
76
 
const double secondsPerMinute = 60.0;
77
 
const double msPerSecond = 1000.0;
78
 
const double msPerMinute = 60.0 * 1000.0;
79
 
const double msPerHour = 60.0 * 60.0 * 1000.0;
80
 
const double msPerDay = 24.0 * 60.0 * 60.0 * 1000.0;
81
 
 
82
 
// Intentionally overridding the default tm of the system
83
 
// Tee members of tm differ on various operating systems.
84
 
struct GregorianDateTime : Noncopyable {
85
 
    GregorianDateTime()
86
 
        : second(0)
87
 
        , minute(0)
88
 
        , hour(0)
89
 
        , weekDay(0)
90
 
        , monthDay(0)
91
 
        , yearDay(0)
92
 
        , month(0)
93
 
        , year(0)
94
 
        , isDST(0)
95
 
        , utcOffset(0)
96
 
        , timeZone(0)
97
 
    {
98
 
    }
99
 
 
100
 
    ~GregorianDateTime()
101
 
    {
102
 
        delete [] timeZone;
103
 
    }
104
 
 
105
 
    GregorianDateTime(const tm& inTm)
106
 
        : second(inTm.tm_sec)
107
 
        , minute(inTm.tm_min)
108
 
        , hour(inTm.tm_hour)
109
 
        , weekDay(inTm.tm_wday)
110
 
        , monthDay(inTm.tm_mday)
111
 
        , yearDay(inTm.tm_yday)
112
 
        , month(inTm.tm_mon)
113
 
        , year(inTm.tm_year)
114
 
        , isDST(inTm.tm_isdst)
115
 
    {
116
 
#if !PLATFORM(WIN_OS) && !PLATFORM(SOLARIS) && !COMPILER(RVCT)
117
 
        utcOffset = static_cast<int>(inTm.tm_gmtoff);
118
 
 
119
 
        int inZoneSize = strlen(inTm.tm_zone) + 1;
120
 
        timeZone = new char[inZoneSize];
121
 
        strncpy(timeZone, inTm.tm_zone, inZoneSize);
122
 
#else
123
 
        utcOffset = static_cast<int>(getUTCOffset() / msPerSecond + (isDST ? secondsPerHour : 0));
124
 
        timeZone = 0;
125
 
#endif
126
 
    }
127
 
 
128
 
    operator tm() const
129
 
    {
130
 
        tm ret;
131
 
        memset(&ret, 0, sizeof(ret));
132
 
 
133
 
        ret.tm_sec   =  second;
134
 
        ret.tm_min   =  minute;
135
 
        ret.tm_hour  =  hour;
136
 
        ret.tm_wday  =  weekDay;
137
 
        ret.tm_mday  =  monthDay;
138
 
        ret.tm_yday  =  yearDay;
139
 
        ret.tm_mon   =  month;
140
 
        ret.tm_year  =  year;
141
 
        ret.tm_isdst =  isDST;
142
 
 
143
 
#if !PLATFORM(WIN_OS) && !PLATFORM(SOLARIS) && !COMPILER(RVCT)
144
 
        ret.tm_gmtoff = static_cast<long>(utcOffset);
145
 
        ret.tm_zone = timeZone;
146
 
#endif
147
 
 
148
 
        return ret;
149
 
    }
150
 
 
151
 
    void copyFrom(const GregorianDateTime& rhs)
152
 
    {
153
 
        second = rhs.second;
154
 
        minute = rhs.minute;
155
 
        hour = rhs.hour;
156
 
        weekDay = rhs.weekDay;
157
 
        monthDay = rhs.monthDay;
158
 
        yearDay = rhs.yearDay;
159
 
        month = rhs.month;
160
 
        year = rhs.year;
161
 
        isDST = rhs.isDST;
162
 
        utcOffset = rhs.utcOffset;
163
 
        if (rhs.timeZone) {
164
 
            int inZoneSize = strlen(rhs.timeZone) + 1;
165
 
            timeZone = new char[inZoneSize];
166
 
            strncpy(timeZone, rhs.timeZone, inZoneSize);
167
 
        } else
168
 
            timeZone = 0;
169
 
    }
170
 
 
171
 
    int second;
172
 
    int minute;
173
 
    int hour;
174
 
    int weekDay;
175
 
    int monthDay;
176
 
    int yearDay;
177
 
    int month;
178
 
    int year;
179
 
    int isDST;
180
 
    int utcOffset;
181
 
    char* timeZone;
182
 
};
183
 
 
184
 
static inline int gmtoffset(const GregorianDateTime& t)
185
 
{
186
 
    return t.utcOffset;
187
 
}
188
 
 
189
 
} // namespace JSC
190
 
 
191
 
#endif // DateMath_h