Skip to content

Commit 0112816

Browse files
committed
Switched to is_convertible from is_primitive. Also switched to const & to be more C++'y, although it hardly matters as all the types in question fit into a register
1 parent 4d3ed16 commit 0112816

File tree

5 files changed

+30
-30
lines changed

5 files changed

+30
-30
lines changed

inst/include/Rcpp/sugar/operators/divides.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -409,19 +409,19 @@ namespace sugar{
409409
}
410410

411411
template <int RTYPE,bool NA, typename T, typename U>
412-
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference<U>::type >::value, sugar::Divides_Vector_Primitive< RTYPE , NA, T > >::type
412+
inline typename traits::enable_if<traits::is_convertible<typename traits::remove_const_and_reference<U>::type, typename traits::storage_type<RTYPE>::type>::value, sugar::Divides_Vector_Primitive< RTYPE , NA, T > >::type
413413
operator/(
414414
const VectorBase<RTYPE,NA,T>& lhs,
415-
U rhs
415+
const U &rhs
416416
) {
417417
return sugar::Divides_Vector_Primitive<RTYPE,NA,T>( lhs, rhs ) ;
418418
}
419419

420420

421421
template <int RTYPE,bool NA, typename T, typename U>
422-
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference<U>::type >::value, sugar::Divides_Primitive_Vector< RTYPE , NA,T> >::type
422+
inline typename traits::enable_if< traits::is_convertible< typename traits::remove_const_and_reference<U>::type, typename traits::storage_type<RTYPE>::type>::value, sugar::Divides_Primitive_Vector< RTYPE , NA,T> >::type
423423
operator/(
424-
U lhs,
424+
const U &lhs,
425425
const VectorBase<RTYPE,NA,T>& rhs
426426
) {
427427
return sugar::Divides_Primitive_Vector<RTYPE,NA,T>( lhs, rhs ) ;

inst/include/Rcpp/sugar/operators/minus.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -413,19 +413,19 @@ namespace sugar{
413413
}
414414

415415
template <int RTYPE,bool NA, typename T, typename U>
416-
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference<U>::type >::value, sugar::Minus_Vector_Primitive< RTYPE , NA, T > >::type
416+
inline typename traits::enable_if<traits::is_convertible<typename traits::remove_const_and_reference<U>::type, typename traits::storage_type<RTYPE>::type>::value, sugar::Minus_Vector_Primitive< RTYPE , NA, T > >::type
417417
operator-(
418418
const VectorBase<RTYPE,NA,T>& lhs,
419-
U rhs
419+
const U &rhs
420420
) {
421421
return sugar::Minus_Vector_Primitive<RTYPE,NA,T>( lhs, rhs ) ;
422422
}
423423

424424

425425
template <int RTYPE,bool NA, typename T, typename U>
426-
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference<U>::type >::value, sugar::Minus_Primitive_Vector< RTYPE , NA,T> >::type
426+
inline typename traits::enable_if<traits::is_convertible<typename traits::remove_const_and_reference<U>::type, typename traits::storage_type<RTYPE>::type>::value, sugar::Minus_Primitive_Vector< RTYPE , NA,T> >::type
427427
operator-(
428-
U lhs,
428+
const U &lhs,
429429
const VectorBase<RTYPE,NA,T>& rhs
430430
) {
431431
return sugar::Minus_Primitive_Vector<RTYPE,NA,T>( lhs, rhs ) ;

inst/include/Rcpp/sugar/operators/plus.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -444,19 +444,19 @@ namespace sugar{
444444

445445

446446
template <int RTYPE,bool NA, typename T, typename U>
447-
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference<U>::type >::value, typename sugar::Plus_Vector_Primitive<RTYPE,NA,T> >::type
447+
inline typename traits::enable_if<traits::is_convertible<typename traits::remove_const_and_reference<U>::type, typename traits::storage_type<RTYPE>::type>::value, typename sugar::Plus_Vector_Primitive<RTYPE,NA,T> >::type
448448
operator+(
449449
const VectorBase<RTYPE,NA,T>& lhs,
450-
U rhs
450+
const U &rhs
451451
) {
452452
return sugar::Plus_Vector_Primitive<RTYPE,NA,T>( lhs, rhs ) ;
453453
}
454454

455455

456456
template <int RTYPE,bool NA, typename T, typename U>
457-
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference<U>::type >::value, typename sugar::Plus_Vector_Primitive< RTYPE , NA , T > >::type
457+
inline typename traits::enable_if<traits::is_convertible<typename traits::remove_const_and_reference<U>::type, typename traits::storage_type<RTYPE>::type>::value, typename sugar::Plus_Vector_Primitive< RTYPE , NA , T> >::type
458458
operator+(
459-
U rhs,
459+
const U &rhs,
460460
const VectorBase<RTYPE,NA,T>& lhs
461461
) {
462462
return sugar::Plus_Vector_Primitive<RTYPE,NA, T >( lhs, rhs ) ;
@@ -465,18 +465,18 @@ operator+(
465465

466466

467467
template <int RTYPE,bool NA, typename T, typename U>
468-
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference<U>::type >::value, sugar::Plus_Vector_Primitive_nona<RTYPE,NA,T> >::type
468+
inline typename traits::enable_if<traits::is_convertible<typename traits::remove_const_and_reference<U>::type, typename traits::storage_type<RTYPE>::type>::value, sugar::Plus_Vector_Primitive_nona<RTYPE,NA,T> >::type
469469
operator+(
470470
const VectorBase<RTYPE,NA,T>& lhs,
471-
typename sugar::NonaPrimitive< U > rhs
471+
const typename sugar::NonaPrimitive< U > &rhs
472472
) {
473473
return sugar::Plus_Vector_Primitive_nona<RTYPE,NA,T>( lhs, rhs ) ;
474474
}
475475

476476
template <int RTYPE,bool NA, typename T, typename U>
477-
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference<U>::type >::value, sugar::Plus_Vector_Primitive_nona< RTYPE , NA , T > >::type
477+
inline typename traits::enable_if<traits::is_convertible<typename traits::remove_const_and_reference<U>::type, typename traits::storage_type<RTYPE>::type>::value, sugar::Plus_Vector_Primitive_nona< RTYPE , NA , T> >::type
478478
operator+(
479-
typename sugar::NonaPrimitive< U > rhs,
479+
const typename sugar::NonaPrimitive< U > &rhs,
480480
const VectorBase<RTYPE,NA,T>& lhs
481481
) {
482482
return sugar::Plus_Vector_Primitive_nona<RTYPE,NA, T >( lhs, rhs ) ;

inst/include/Rcpp/sugar/operators/times.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -425,19 +425,19 @@ namespace sugar{
425425
}
426426

427427
template <int RTYPE,bool NA, typename T, typename U>
428-
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference<U>::type >::value, sugar::Times_Vector_Primitive<RTYPE,NA,T> >::type
428+
inline typename traits::enable_if<traits::is_convertible<typename traits::remove_const_and_reference<U>::type, typename traits::storage_type<RTYPE>::type>::value, sugar::Times_Vector_Primitive<RTYPE,NA,T> >::type
429429
operator*(
430430
const VectorBase<RTYPE,NA,T>& lhs,
431-
U rhs
431+
const U &rhs
432432
) {
433433
return sugar::Times_Vector_Primitive<RTYPE,NA,T>( lhs, rhs ) ;
434434
}
435435

436436

437437
template <int RTYPE,bool NA, typename T, typename U>
438-
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference<U>::type >::value, sugar::Times_Vector_Primitive< RTYPE , NA , T > >::type
438+
inline typename traits::enable_if<traits::is_convertible<typename traits::remove_const_and_reference<U>::type, typename traits::storage_type<RTYPE>::type>::value, sugar::Times_Vector_Primitive< RTYPE , NA , T > >::type
439439
operator*(
440-
U rhs,
440+
const U &rhs,
441441
const VectorBase<RTYPE,NA,T>& lhs
442442
) {
443443
return sugar::Times_Vector_Primitive<RTYPE,NA, T >( lhs, rhs ) ;
@@ -446,18 +446,18 @@ operator*(
446446

447447

448448
template <int RTYPE,bool NA, typename T, typename U>
449-
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference<U>::type >::value, sugar::Times_Vector_Primitive_nona<RTYPE,NA,T> >::type
449+
inline typename traits::enable_if<traits::is_convertible<typename traits::remove_const_and_reference<U>::type, typename traits::storage_type<RTYPE>::type>::value, sugar::Times_Vector_Primitive_nona<RTYPE,NA,T> >::type
450450
operator*(
451451
const VectorBase<RTYPE,NA,T>& lhs,
452-
typename sugar::NonaPrimitive< U > rhs
452+
const typename sugar::NonaPrimitive< U > &rhs
453453
) {
454454
return sugar::Times_Vector_Primitive_nona<RTYPE,NA,T>( lhs, rhs ) ;
455455
}
456456

457457
template <int RTYPE,bool NA, typename T, typename U>
458-
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference<U>::type >::value, sugar::Times_Vector_Primitive_nona< RTYPE , NA , T > >::type
458+
inline typename traits::enable_if<traits::is_convertible<typename traits::remove_const_and_reference<U>::type, typename traits::storage_type<RTYPE>::type>::value, sugar::Times_Vector_Primitive_nona< RTYPE , NA , T > >::type
459459
operator*(
460-
typename sugar::NonaPrimitive< U > rhs,
460+
const typename sugar::NonaPrimitive< U > &rhs,
461461
const VectorBase<RTYPE,NA,T>& lhs
462462
) {
463463
return sugar::Times_Vector_Primitive_nona<RTYPE,NA, T >( lhs, rhs ) ;

inst/include/Rcpp/vector/Matrix.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -249,9 +249,9 @@ inline std::ostream &operator<<(std::ostream & s, const Matrix<REALSXP, StorageP
249249

250250
#define RCPP_GENERATE_MATRIX_SCALAR_OPERATOR(__OPERATOR__) \
251251
template <int RTYPE, template <class> class StoragePolicy, typename T > \
252-
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference< T >::type >::value, \
253-
Matrix<RTYPE, StoragePolicy> >::type operator __OPERATOR__ (const Matrix<RTYPE, StoragePolicy> &lhs, \
254-
T rhs) { \
252+
inline typename traits::enable_if< traits::is_convertible< typename traits::remove_const_and_reference< T >::type, \
253+
typename Matrix<RTYPE, StoragePolicy>::stored_type >::value, Matrix<RTYPE, StoragePolicy> >::type \
254+
operator __OPERATOR__ (const Matrix<RTYPE, StoragePolicy> &lhs, const T &rhs) { \
255255
Vector<RTYPE, StoragePolicy> v = static_cast<const Vector<RTYPE, StoragePolicy> &>(lhs) __OPERATOR__ rhs; \
256256
v.attr("dim") = Vector<INTSXP>::create(lhs.nrow(), lhs.ncol()); \
257257
return as< Matrix<RTYPE, StoragePolicy> >(v); \
@@ -266,9 +266,9 @@ RCPP_GENERATE_MATRIX_SCALAR_OPERATOR(/)
266266

267267
#define RCPP_GENERATE_SCALAR_MATRIX_OPERATOR(__OPERATOR__) \
268268
template <int RTYPE, template <class> class StoragePolicy, typename T > \
269-
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference< T >::type >::value, \
270-
Matrix<RTYPE, StoragePolicy> >::type operator __OPERATOR__ (T lhs, \
271-
const Matrix<RTYPE, StoragePolicy> &rhs) { \
269+
inline typename traits::enable_if< traits::is_convertible< typename traits::remove_const_and_reference< T >::type, \
270+
typename Matrix<RTYPE, StoragePolicy>::stored_type >::value, Matrix<RTYPE, StoragePolicy> >::type \
271+
operator __OPERATOR__ (const T &lhs, const Matrix<RTYPE, StoragePolicy> &rhs) { \
272272
Vector<RTYPE, StoragePolicy> v = static_cast<const Vector<RTYPE, StoragePolicy> &>(rhs); \
273273
v = lhs __OPERATOR__ v; \
274274
v.attr("dim") = Vector<INTSXP>::create(rhs.nrow(), rhs.ncol()); \

0 commit comments

Comments
 (0)