| 218 | } |
| 219 | |
| 220 | void populateDfRow(SEXP ans, R_len_t row_index, const Element& e, RblpapiT rblpapitype) { |
| 221 | // the vectors are already initialized to NAs |
| 222 | // so no need to set as NA here |
| 223 | if(e.isNull()) { return; } |
| 224 | |
| 225 | switch(rblpapitype) { |
| 226 | case RblpapiT::Logical: |
| 227 | LOGICAL(ans)[row_index] = e.getValueAsBool(); break; |
| 228 | case RblpapiT::Integer: |
| 229 | INTEGER(ans)[row_index] = e.getValueAsInt32(); break; |
| 230 | case RblpapiT::Integer64: |
| 231 | REAL(ans)[row_index] = e.getValueAsFloat64(); break; |
| 232 | case RblpapiT::Double: |
| 233 | REAL(ans)[row_index] = e.getValueAsFloat64(); break; |
| 234 | case RblpapiT::Float: |
| 235 | REAL(ans)[row_index] = e.getValueAsFloat64(); break; |
| 236 | case RblpapiT::Date: |
| 237 | // handle the case of BBG passing down dates as double in YYYYMMDD format |
| 238 | REAL(ans)[row_index] = e.datatype()==BLPAPI_DATATYPE_FLOAT32 || e.datatype()==BLPAPI_DATATYPE_FLOAT64 ? |
| 239 | bbgDateToRDate(e.getValueAsFloat64()) : |
| 240 | bbgDateToRDate(e.getValueAsDatetime()); |
| 241 | break; |
| 242 | case RblpapiT::Datetime: |
| 243 | REAL(ans)[row_index] = bbgDateToPOSIX(e.getValueAsDatetime()); break; |
| 244 | case RblpapiT::String: |
| 245 | SET_STRING_ELT(ans,row_index,Rf_mkCharCE(e.getValueAsString(), CE_UTF8)); break; |
| 246 | default: // try to convert it as a string |
| 247 | SET_STRING_ELT(ans,row_index,Rf_mkCharCE(e.getValueAsString(), CE_UTF8)); break; |
| 248 | } |
| 249 | } |
| 250 | |
| 251 | Rcpp::NumericVector createPOSIXtVector(const std::vector<double> & ticks, |
| 252 | const std::string tz) { |
no test coverage detected