namespace {
const size_t DATE_LEN = 14; // YYYYMMDDHHmmSS
+inline uint64_t ull(const int c) { return (static_cast<uint64_t>(c)); }
+
inline void
checkRange(const unsigned min, const unsigned max, const unsigned value,
const string& valname)
checkRange(0, 59, minute, "minute");
checkRange(0, 60, second, "second"); // 60 == leap second.
- uint64_t timeval = second + (60ULL * minute) + (3600ULL * hour) +
- ((day - 1) * 86400ULL);
+ uint64_t timeval = second + (ull(60) * minute) + (ull(3600) * hour) +
+ ((day - 1) * ull(86400));
for (unsigned m = 0; m < (month - 1); ++m) {
- timeval += days[m] * 86400ULL;
+ timeval += days[m] * ull(86400);
}
if (isLeap(year) && month > 2) {
- timeval += 86400ULL;
+ timeval += ull(86400);
}
for (unsigned y = 1970; y < year; ++y) {
- timeval += ((isLeap(y) ? 366 : 365) * 86400ULL);
+ timeval += ((isLeap(y) ? 366 : 365) * ull(86400));
}
return (timeval);