Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(169)

Side by Side Diff: fpdfsdk/cpdfsdk_datetime.cpp

Issue 2333213005: Remove inner FX_DATETIME struct from CPDFSDK_DateTime (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | fpdfsdk/include/cpdfsdk_datetime.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 PDFium Authors. All rights reserved. 1 // Copyright 2016 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "fpdfsdk/include/cpdfsdk_datetime.h" 7 #include "fpdfsdk/include/cpdfsdk_datetime.h"
8 8
9 #include "core/fxcrt/include/fx_ext.h" 9 #include "core/fxcrt/include/fx_ext.h"
10 10
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 } 58 }
59 59
60 } // namespace 60 } // namespace
61 61
62 CPDFSDK_DateTime::CPDFSDK_DateTime() { 62 CPDFSDK_DateTime::CPDFSDK_DateTime() {
63 ResetDateTime(); 63 ResetDateTime();
64 } 64 }
65 65
66 CPDFSDK_DateTime::CPDFSDK_DateTime(const CFX_ByteString& dtStr) { 66 CPDFSDK_DateTime::CPDFSDK_DateTime(const CFX_ByteString& dtStr) {
67 ResetDateTime(); 67 ResetDateTime();
68
69 FromPDFDateTimeString(dtStr); 68 FromPDFDateTimeString(dtStr);
70 } 69 }
71 70
72 CPDFSDK_DateTime::CPDFSDK_DateTime(const CPDFSDK_DateTime& datetime) { 71 CPDFSDK_DateTime::CPDFSDK_DateTime(const CPDFSDK_DateTime& that)
73 FXSYS_memcpy(&dt, &datetime.dt, sizeof(FX_DATETIME)); 72 : m_year(that.m_year),
74 } 73 m_month(that.m_month),
74 m_day(that.m_day),
75 m_hour(that.m_hour),
76 m_minute(that.m_minute),
77 m_second(that.m_second),
78 m_tzHour(that.m_tzHour),
79 m_tzMinute(that.m_tzMinute) {}
75 80
76 CPDFSDK_DateTime::CPDFSDK_DateTime(const FX_SYSTEMTIME& st) { 81 CPDFSDK_DateTime::CPDFSDK_DateTime(const FX_SYSTEMTIME& st) {
77 tzset(); 82 tzset();
78 83
79 dt.year = static_cast<int16_t>(st.wYear); 84 m_year = static_cast<int16_t>(st.wYear);
80 dt.month = static_cast<uint8_t>(st.wMonth); 85 m_month = static_cast<uint8_t>(st.wMonth);
81 dt.day = static_cast<uint8_t>(st.wDay); 86 m_day = static_cast<uint8_t>(st.wDay);
82 dt.hour = static_cast<uint8_t>(st.wHour); 87 m_hour = static_cast<uint8_t>(st.wHour);
83 dt.minute = static_cast<uint8_t>(st.wMinute); 88 m_minute = static_cast<uint8_t>(st.wMinute);
84 dt.second = static_cast<uint8_t>(st.wSecond); 89 m_second = static_cast<uint8_t>(st.wSecond);
85 } 90 }
86 91
87 void CPDFSDK_DateTime::ResetDateTime() { 92 void CPDFSDK_DateTime::ResetDateTime() {
88 tzset(); 93 tzset();
89 94
90 time_t curTime; 95 time_t curTime;
91 time(&curTime); 96 time(&curTime);
97
92 struct tm* newtime = localtime(&curTime); 98 struct tm* newtime = localtime(&curTime);
93 99 m_year = newtime->tm_year + 1900;
94 dt.year = newtime->tm_year + 1900; 100 m_month = newtime->tm_mon + 1;
95 dt.month = newtime->tm_mon + 1; 101 m_day = newtime->tm_mday;
96 dt.day = newtime->tm_mday; 102 m_hour = newtime->tm_hour;
97 dt.hour = newtime->tm_hour; 103 m_minute = newtime->tm_min;
98 dt.minute = newtime->tm_min; 104 m_second = newtime->tm_sec;
99 dt.second = newtime->tm_sec;
100 } 105 }
101 106
102 bool CPDFSDK_DateTime::operator==(const CPDFSDK_DateTime& datetime) const { 107 bool CPDFSDK_DateTime::operator==(const CPDFSDK_DateTime& that) const {
103 return (FXSYS_memcmp(&dt, &datetime.dt, sizeof(FX_DATETIME)) == 0); 108 return m_year == that.m_year && m_month == that.m_month &&
109 m_day == that.m_day && m_hour == that.m_hour &&
110 m_minute == that.m_minute && m_second == that.m_second &&
111 m_tzHour == that.m_tzHour && m_tzMinute == that.m_tzMinute;
104 } 112 }
105 113
106 bool CPDFSDK_DateTime::operator!=(const CPDFSDK_DateTime& datetime) const { 114 bool CPDFSDK_DateTime::operator!=(const CPDFSDK_DateTime& datetime) const {
107 return !(*this == datetime); 115 return !(*this == datetime);
108 } 116 }
109 117
110 time_t CPDFSDK_DateTime::ToTime_t() const { 118 time_t CPDFSDK_DateTime::ToTime_t() const {
111 struct tm newtime; 119 struct tm newtime;
112 120
113 newtime.tm_year = dt.year - 1900; 121 newtime.tm_year = m_year - 1900;
114 newtime.tm_mon = dt.month - 1; 122 newtime.tm_mon = m_month - 1;
115 newtime.tm_mday = dt.day; 123 newtime.tm_mday = m_day;
116 newtime.tm_hour = dt.hour; 124 newtime.tm_hour = m_hour;
117 newtime.tm_min = dt.minute; 125 newtime.tm_min = m_minute;
118 newtime.tm_sec = dt.second; 126 newtime.tm_sec = m_second;
119 127
120 return mktime(&newtime); 128 return mktime(&newtime);
121 } 129 }
122 130
123 CPDFSDK_DateTime& CPDFSDK_DateTime::FromPDFDateTimeString( 131 CPDFSDK_DateTime& CPDFSDK_DateTime::FromPDFDateTimeString(
124 const CFX_ByteString& dtStr) { 132 const CFX_ByteString& dtStr) {
125 int strLength = dtStr.GetLength(); 133 int strLength = dtStr.GetLength();
126 if (strLength <= 0) 134 if (strLength <= 0)
127 return *this; 135 return *this;
128 136
129 int i = 0; 137 int i = 0;
130 while (i < strLength && !std::isdigit(dtStr[i])) 138 while (i < strLength && !std::isdigit(dtStr[i]))
131 ++i; 139 ++i;
132 140
133 if (i >= strLength) 141 if (i >= strLength)
134 return *this; 142 return *this;
135 143
136 int j = 0; 144 int j = 0;
137 int k = 0; 145 int k = 0;
138 FX_CHAR ch; 146 FX_CHAR ch;
139 while (i < strLength && j < 4) { 147 while (i < strLength && j < 4) {
140 ch = dtStr[i]; 148 ch = dtStr[i];
141 k = k * 10 + FXSYS_toDecimalDigit(ch); 149 k = k * 10 + FXSYS_toDecimalDigit(ch);
142 j++; 150 j++;
143 if (!std::isdigit(ch)) 151 if (!std::isdigit(ch))
144 break; 152 break;
145 i++; 153 i++;
146 } 154 }
147 dt.year = static_cast<int16_t>(k); 155 m_year = static_cast<int16_t>(k);
148 if (i >= strLength || j < 4) 156 if (i >= strLength || j < 4)
149 return *this; 157 return *this;
150 158
151 j = 0; 159 j = 0;
152 k = 0; 160 k = 0;
153 while (i < strLength && j < 2) { 161 while (i < strLength && j < 2) {
154 ch = dtStr[i]; 162 ch = dtStr[i];
155 k = k * 10 + FXSYS_toDecimalDigit(ch); 163 k = k * 10 + FXSYS_toDecimalDigit(ch);
156 j++; 164 j++;
157 if (!std::isdigit(ch)) 165 if (!std::isdigit(ch))
158 break; 166 break;
159 i++; 167 i++;
160 } 168 }
161 dt.month = static_cast<uint8_t>(k); 169 m_month = static_cast<uint8_t>(k);
162 if (i >= strLength || j < 2) 170 if (i >= strLength || j < 2)
163 return *this; 171 return *this;
164 172
165 j = 0; 173 j = 0;
166 k = 0; 174 k = 0;
167 while (i < strLength && j < 2) { 175 while (i < strLength && j < 2) {
168 ch = dtStr[i]; 176 ch = dtStr[i];
169 k = k * 10 + FXSYS_toDecimalDigit(ch); 177 k = k * 10 + FXSYS_toDecimalDigit(ch);
170 j++; 178 j++;
171 if (!std::isdigit(ch)) 179 if (!std::isdigit(ch))
172 break; 180 break;
173 i++; 181 i++;
174 } 182 }
175 dt.day = static_cast<uint8_t>(k); 183 m_day = static_cast<uint8_t>(k);
176 if (i >= strLength || j < 2) 184 if (i >= strLength || j < 2)
177 return *this; 185 return *this;
178 186
179 j = 0; 187 j = 0;
180 k = 0; 188 k = 0;
181 while (i < strLength && j < 2) { 189 while (i < strLength && j < 2) {
182 ch = dtStr[i]; 190 ch = dtStr[i];
183 k = k * 10 + FXSYS_toDecimalDigit(ch); 191 k = k * 10 + FXSYS_toDecimalDigit(ch);
184 j++; 192 j++;
185 if (!std::isdigit(ch)) 193 if (!std::isdigit(ch))
186 break; 194 break;
187 i++; 195 i++;
188 } 196 }
189 dt.hour = static_cast<uint8_t>(k); 197 m_hour = static_cast<uint8_t>(k);
190 if (i >= strLength || j < 2) 198 if (i >= strLength || j < 2)
191 return *this; 199 return *this;
192 200
193 j = 0; 201 j = 0;
194 k = 0; 202 k = 0;
195 while (i < strLength && j < 2) { 203 while (i < strLength && j < 2) {
196 ch = dtStr[i]; 204 ch = dtStr[i];
197 k = k * 10 + FXSYS_toDecimalDigit(ch); 205 k = k * 10 + FXSYS_toDecimalDigit(ch);
198 j++; 206 j++;
199 if (!std::isdigit(ch)) 207 if (!std::isdigit(ch))
200 break; 208 break;
201 i++; 209 i++;
202 } 210 }
203 dt.minute = static_cast<uint8_t>(k); 211 m_minute = static_cast<uint8_t>(k);
204 if (i >= strLength || j < 2) 212 if (i >= strLength || j < 2)
205 return *this; 213 return *this;
206 214
207 j = 0; 215 j = 0;
208 k = 0; 216 k = 0;
209 while (i < strLength && j < 2) { 217 while (i < strLength && j < 2) {
210 ch = dtStr[i]; 218 ch = dtStr[i];
211 k = k * 10 + FXSYS_toDecimalDigit(ch); 219 k = k * 10 + FXSYS_toDecimalDigit(ch);
212 j++; 220 j++;
213 if (!std::isdigit(ch)) 221 if (!std::isdigit(ch))
214 break; 222 break;
215 i++; 223 i++;
216 } 224 }
217 dt.second = static_cast<uint8_t>(k); 225 m_second = static_cast<uint8_t>(k);
218 if (i >= strLength || j < 2) 226 if (i >= strLength || j < 2)
219 return *this; 227 return *this;
220 228
221 ch = dtStr[i++]; 229 ch = dtStr[i++];
222 if (ch != '-' && ch != '+') 230 if (ch != '-' && ch != '+')
223 return *this; 231 return *this;
224 if (ch == '-') 232 if (ch == '-')
225 dt.tzHour = -1; 233 m_tzHour = -1;
226 else 234 else
227 dt.tzHour = 1; 235 m_tzHour = 1;
228 j = 0; 236 j = 0;
229 k = 0; 237 k = 0;
230 while (i < strLength && j < 2) { 238 while (i < strLength && j < 2) {
231 ch = dtStr[i]; 239 ch = dtStr[i];
232 k = k * 10 + FXSYS_toDecimalDigit(ch); 240 k = k * 10 + FXSYS_toDecimalDigit(ch);
233 j++; 241 j++;
234 if (!std::isdigit(ch)) 242 if (!std::isdigit(ch))
235 break; 243 break;
236 i++; 244 i++;
237 } 245 }
238 dt.tzHour *= static_cast<int8_t>(k); 246 m_tzHour *= static_cast<int8_t>(k);
239 if (i >= strLength || j < 2) 247 if (i >= strLength || j < 2)
240 return *this; 248 return *this;
241 249
242 if (dtStr[i++] != '\'') 250 if (dtStr[i++] != '\'')
243 return *this; 251 return *this;
244 j = 0; 252 j = 0;
245 k = 0; 253 k = 0;
246 while (i < strLength && j < 2) { 254 while (i < strLength && j < 2) {
247 ch = dtStr[i]; 255 ch = dtStr[i];
248 k = k * 10 + FXSYS_toDecimalDigit(ch); 256 k = k * 10 + FXSYS_toDecimalDigit(ch);
249 j++; 257 j++;
250 if (!std::isdigit(ch)) 258 if (!std::isdigit(ch))
251 break; 259 break;
252 i++; 260 i++;
253 } 261 }
254 dt.tzMinute = static_cast<uint8_t>(k); 262 m_tzMinute = static_cast<uint8_t>(k);
255 return *this; 263 return *this;
256 } 264 }
257 265
258 CFX_ByteString CPDFSDK_DateTime::ToCommonDateTimeString() { 266 CFX_ByteString CPDFSDK_DateTime::ToCommonDateTimeString() {
259 CFX_ByteString str1; 267 CFX_ByteString str1;
260 str1.Format("%04d-%02u-%02u %02u:%02u:%02u ", dt.year, dt.month, dt.day, 268 str1.Format("%04d-%02u-%02u %02u:%02u:%02u ", m_year, m_month, m_day, m_hour,
261 dt.hour, dt.minute, dt.second); 269 m_minute, m_second);
262 if (dt.tzHour < 0) 270 if (m_tzHour < 0)
263 str1 += "-"; 271 str1 += "-";
264 else 272 else
265 str1 += "+"; 273 str1 += "+";
266 CFX_ByteString str2; 274 CFX_ByteString str2;
267 str2.Format("%02d:%02u", std::abs(static_cast<int>(dt.tzHour)), dt.tzMinute); 275 str2.Format("%02d:%02u", std::abs(static_cast<int>(m_tzHour)), m_tzMinute);
268 return str1 + str2; 276 return str1 + str2;
269 } 277 }
270 278
271 CFX_ByteString CPDFSDK_DateTime::ToPDFDateTimeString() { 279 CFX_ByteString CPDFSDK_DateTime::ToPDFDateTimeString() {
272 CFX_ByteString dtStr; 280 CFX_ByteString dtStr;
273 char tempStr[32]; 281 char tempStr[32];
274 memset(tempStr, 0, sizeof(tempStr)); 282 memset(tempStr, 0, sizeof(tempStr));
275 FXSYS_snprintf(tempStr, sizeof(tempStr) - 1, "D:%04d%02u%02u%02u%02u%02u", 283 FXSYS_snprintf(tempStr, sizeof(tempStr) - 1, "D:%04d%02u%02u%02u%02u%02u",
276 dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second); 284 m_year, m_month, m_day, m_hour, m_minute, m_second);
277 dtStr = CFX_ByteString(tempStr); 285 dtStr = CFX_ByteString(tempStr);
278 if (dt.tzHour < 0) 286 if (m_tzHour < 0)
279 dtStr += CFX_ByteString("-"); 287 dtStr += CFX_ByteString("-");
280 else 288 else
281 dtStr += CFX_ByteString("+"); 289 dtStr += CFX_ByteString("+");
282 memset(tempStr, 0, sizeof(tempStr)); 290 memset(tempStr, 0, sizeof(tempStr));
283 FXSYS_snprintf(tempStr, sizeof(tempStr) - 1, "%02d'%02u'", 291 FXSYS_snprintf(tempStr, sizeof(tempStr) - 1, "%02d'%02u'",
284 std::abs(static_cast<int>(dt.tzHour)), dt.tzMinute); 292 std::abs(static_cast<int>(m_tzHour)), m_tzMinute);
285 dtStr += CFX_ByteString(tempStr); 293 dtStr += CFX_ByteString(tempStr);
286 return dtStr; 294 return dtStr;
287 } 295 }
288 296
289 void CPDFSDK_DateTime::ToSystemTime(FX_SYSTEMTIME& st) { 297 void CPDFSDK_DateTime::ToSystemTime(FX_SYSTEMTIME& st) {
290 time_t t = this->ToTime_t(); 298 time_t t = this->ToTime_t();
291 struct tm* pTime = localtime(&t); 299 struct tm* pTime = localtime(&t);
292 300
293 if (!pTime) 301 if (!pTime)
294 return; 302 return;
295 303
296 st.wYear = static_cast<uint16_t>(pTime->tm_year) + 1900; 304 st.wYear = static_cast<uint16_t>(pTime->tm_year) + 1900;
297 st.wMonth = static_cast<uint16_t>(pTime->tm_mon) + 1; 305 st.wMonth = static_cast<uint16_t>(pTime->tm_mon) + 1;
298 st.wDay = static_cast<uint16_t>(pTime->tm_mday); 306 st.wDay = static_cast<uint16_t>(pTime->tm_mday);
299 st.wDayOfWeek = static_cast<uint16_t>(pTime->tm_wday); 307 st.wDayOfWeek = static_cast<uint16_t>(pTime->tm_wday);
300 st.wHour = static_cast<uint16_t>(pTime->tm_hour); 308 st.wHour = static_cast<uint16_t>(pTime->tm_hour);
301 st.wMinute = static_cast<uint16_t>(pTime->tm_min); 309 st.wMinute = static_cast<uint16_t>(pTime->tm_min);
302 st.wSecond = static_cast<uint16_t>(pTime->tm_sec); 310 st.wSecond = static_cast<uint16_t>(pTime->tm_sec);
303 st.wMilliseconds = 0; 311 st.wMilliseconds = 0;
304 } 312 }
305 313
306 CPDFSDK_DateTime CPDFSDK_DateTime::ToGMT() const { 314 CPDFSDK_DateTime CPDFSDK_DateTime::ToGMT() const {
307 CPDFSDK_DateTime new_dt = *this; 315 CPDFSDK_DateTime new_dt = *this;
308 new_dt.AddSeconds( 316 new_dt.AddSeconds(-GetTimeZoneInSeconds(new_dt.m_tzHour, new_dt.m_tzMinute));
309 -GetTimeZoneInSeconds(new_dt.dt.tzHour, new_dt.dt.tzMinute)); 317 new_dt.m_tzHour = 0;
310 new_dt.dt.tzHour = 0; 318 new_dt.m_tzMinute = 0;
311 new_dt.dt.tzMinute = 0;
312 return new_dt; 319 return new_dt;
313 } 320 }
314 321
315 CPDFSDK_DateTime& CPDFSDK_DateTime::AddDays(short days) { 322 CPDFSDK_DateTime& CPDFSDK_DateTime::AddDays(short days) {
316 if (days == 0) 323 if (days == 0)
317 return *this; 324 return *this;
318 325
319 int16_t y = dt.year; 326 int16_t y = m_year;
320 uint8_t m = dt.month; 327 uint8_t m = m_month;
321 uint8_t d = dt.day; 328 uint8_t d = m_day;
322 329
323 int ldays = days; 330 int ldays = days;
324 if (ldays > 0) { 331 if (ldays > 0) {
325 int16_t yy = y; 332 int16_t yy = y;
326 if ((static_cast<uint16_t>(m) * 100 + d) > 300) 333 if ((static_cast<uint16_t>(m) * 100 + d) > 300)
327 yy++; 334 yy++;
328 int ydays = GetYearDays(yy); 335 int ydays = GetYearDays(yy);
329 int mdays; 336 int mdays;
330 while (ldays >= ydays) { 337 while (ldays >= ydays) {
331 y++; 338 y++;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 ydays = GetYearDays(yy); 371 ydays = GetYearDays(yy);
365 } 372 }
366 while (ldays >= d) { 373 while (ldays >= d) {
367 ldays -= d; 374 ldays -= d;
368 m--; 375 m--;
369 d = GetMonthDays(y, m); 376 d = GetMonthDays(y, m);
370 } 377 }
371 d -= ldays; 378 d -= ldays;
372 } 379 }
373 380
374 dt.year = y; 381 m_year = y;
375 dt.month = m; 382 m_month = m;
376 dt.day = d; 383 m_day = d;
377 384
378 return *this; 385 return *this;
379 } 386 }
380 387
381 CPDFSDK_DateTime& CPDFSDK_DateTime::AddSeconds(int seconds) { 388 CPDFSDK_DateTime& CPDFSDK_DateTime::AddSeconds(int seconds) {
382 if (seconds == 0) 389 if (seconds == 0)
383 return *this; 390 return *this;
384 391
385 int n; 392 int n;
386 int days; 393 int days;
387 394
388 n = dt.hour * 3600 + dt.minute * 60 + dt.second + seconds; 395 n = m_hour * 3600 + m_minute * 60 + m_second + seconds;
389 if (n < 0) { 396 if (n < 0) {
390 days = (n - 86399) / 86400; 397 days = (n - 86399) / 86400;
391 n -= days * 86400; 398 n -= days * 86400;
392 } else { 399 } else {
393 days = n / 86400; 400 days = n / 86400;
394 n %= 86400; 401 n %= 86400;
395 } 402 }
396 dt.hour = static_cast<uint8_t>(n / 3600); 403 m_hour = static_cast<uint8_t>(n / 3600);
397 dt.hour %= 24; 404 m_hour %= 24;
398 n %= 3600; 405 n %= 3600;
399 dt.minute = static_cast<uint8_t>(n / 60); 406 m_minute = static_cast<uint8_t>(n / 60);
400 dt.second = static_cast<uint8_t>(n % 60); 407 m_second = static_cast<uint8_t>(n % 60);
401 if (days != 0) 408 if (days != 0)
402 AddDays(days); 409 AddDays(days);
403 410
404 return *this; 411 return *this;
405 } 412 }
OLDNEW
« no previous file with comments | « no previous file | fpdfsdk/include/cpdfsdk_datetime.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698