Skip to content

Commit 5f20d1a

Browse files
authored
Merge pull request #687 from krlmlr/f-Wconversion-1
Reduce -Wconversion warnings for date-time code
2 parents c57b754 + 9dbbcb5 commit 5f20d1a

File tree

4 files changed

+21
-18
lines changed

4 files changed

+21
-18
lines changed

inst/include/Rcpp/date_datetime/Date.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ namespace Rcpp {
110110
char txt[32];
111111
struct tm temp = m_tm;
112112
temp.tm_year -= baseYear(); // adjust for fact that system has year rel. to 1900
113-
int res = ::strftime(txt, 31, fmt, &temp);
113+
size_t res = ::strftime(txt, 31, fmt, &temp);
114114
if (res == 0) {
115115
return std::string("");
116116
} else {
@@ -127,7 +127,7 @@ namespace Rcpp {
127127
// update m_tm based on m_d
128128
void update_tm() {
129129
if (R_FINITE(m_d)) {
130-
time_t t = 24*60*60 * m_d; // (fractional) days since epoch to seconds since epoch
130+
time_t t = static_cast<time_t>(24*60*60 * m_d); // (fractional) days since epoch to seconds since epoch
131131
m_tm = *gmtime_(&t);
132132
} else {
133133
m_tm.tm_sec = m_tm.tm_min = m_tm.tm_hour = m_tm.tm_isdst = NA_INTEGER;
@@ -158,7 +158,7 @@ namespace Rcpp {
158158
inline Date operator+(const Date &date, int offset) {
159159
Date newdate(date.m_d);
160160
newdate.m_d += offset;
161-
time_t t = 24*60*60 * newdate.m_d; // days since epoch to seconds since epo
161+
time_t t = static_cast<time_t>(24*60*60 * newdate.m_d); // days since epoch to seconds since epo
162162
newdate.m_tm = *gmtime_(&t);
163163
return newdate;
164164
}

inst/include/Rcpp/date_datetime/Datetime.h

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ namespace Rcpp {
7676
char txtiso[64], txtsec[64];
7777
time_t t = static_cast<time_t>(std::floor(m_dt));
7878
struct tm temp = *localtime(&t); // localtime, not gmtime
79-
int res = ::strftime(txtiso, 63, fmt, &temp);
79+
size_t res = ::strftime(txtiso, 63, fmt, &temp);
8080
if (res == 0) {
8181
return std::string("");
8282
} else {
@@ -99,10 +99,11 @@ namespace Rcpp {
9999
// update m_tm based on m_dt
100100
void update_tm() {
101101
if (R_FINITE(m_dt)) {
102-
time_t t = static_cast<time_t>(std::floor(m_dt));
102+
double dt = std::floor(m_dt);
103+
time_t t = static_cast<time_t>(dt);
103104
m_tm = *gmtime_(&t);
104105
// m_us is fractional (micro)secs as diff. between (fractional) m_dt and m_tm
105-
m_us = static_cast<int>(::Rf_fround( (m_dt - t) * 1.0e6, 0.0));
106+
m_us = static_cast<int>(::Rf_fround( (m_dt - dt) * 1.0e6, 0.0));
106107
} else {
107108
m_dt = NA_REAL; // NaN and Inf need it set
108109
m_tm.tm_sec = m_tm.tm_min = m_tm.tm_hour = m_tm.tm_isdst = NA_INTEGER;
@@ -137,18 +138,20 @@ namespace Rcpp {
137138
inline Datetime operator+(const Datetime &datetime, double offset) {
138139
Datetime newdt(datetime.m_dt);
139140
newdt.m_dt += offset;
140-
time_t t = static_cast<time_t>(std::floor(newdt.m_dt));
141+
double dt = std::floor(newdt.m_dt);
142+
time_t t = static_cast<time_t>(dt);
141143
newdt.m_tm = *gmtime_(&t);
142-
newdt.m_us = static_cast<int>(::Rf_fround( (newdt.m_dt - t) * 1.0e6, 0.0));
144+
newdt.m_us = static_cast<int>(::Rf_fround( (newdt.m_dt - dt) * 1.0e6, 0.0));
143145
return newdt;
144146
}
145147

146148
inline Datetime operator+(const Datetime &datetime, int offset) {
147149
Datetime newdt(datetime.m_dt);
148150
newdt.m_dt += offset;
149-
time_t t = static_cast<time_t>(std::floor(newdt.m_dt));
151+
double dt = std::floor(newdt.m_dt);
152+
time_t t = static_cast<time_t>(dt);
150153
newdt.m_tm = *gmtime_(&t);
151-
newdt.m_us = static_cast<int>(::Rf_fround( (newdt.m_dt - t) * 1.0e6, 0.0));
154+
newdt.m_us = static_cast<int>(::Rf_fround( (newdt.m_dt - dt) * 1.0e6, 0.0));
152155
return newdt;
153156
}
154157

inst/include/Rcpp/date_datetime/newDateVector.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ namespace Rcpp {
3737
newDateVector(int n) : NumericVector(n) { setClass(); }
3838

3939
inline std::vector<Date> getDates() const {
40-
int n = this->size();
40+
size_t n = this->size();
4141
std::vector<Date> v(n);
42-
for (int i=0; i<n; i++)
42+
for (size_t i=0; i<n; i++)
4343
v[i] = (*this)[i];
4444
return v;
4545
}
@@ -63,8 +63,8 @@ namespace Rcpp {
6363
};
6464

6565
inline std::ostream &operator<<(std::ostream & os, const newDateVector d) {
66-
int n = d.size();
67-
for (int i=0; i<n; i++) {
66+
size_t n = d.size();
67+
for (size_t i=0; i<n; i++) {
6868
os << Date(d[i]).format() << " ";
6969
if ((i+1) % 8 == 0) os << "\n";
7070
}

inst/include/Rcpp/date_datetime/newDatetimeVector.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ namespace Rcpp {
4545
}
4646

4747
inline std::vector<Datetime> getDatetimes() const {
48-
int n = this->size();
48+
size_t n = this->size();
4949
std::vector<Datetime> v(n);
50-
for (int i=0; i<n; i++)
50+
for (size_t i=0; i<n; i++)
5151
v[i] = (*this)[i];
5252
return v;
5353
}
@@ -79,8 +79,8 @@ namespace Rcpp {
7979
};
8080

8181
inline std::ostream &operator<<(std::ostream & os, const newDatetimeVector d) {
82-
int n = d.size();
83-
for (int i=0; i<n; i++) {
82+
size_t n = d.size();
83+
for (size_t i=0; i<n; i++) {
8484
os << Datetime(d[i]).format() << " ";
8585
if ((i+1) % 4 == 0) os << "\n";
8686
}

0 commit comments

Comments
 (0)