diff --git a/inst/include/dplyr/SubsetVectorVisitorImpl.h b/inst/include/dplyr/SubsetVectorVisitorImpl.h index f3a94569fc..ff32065c03 100644 --- a/inst/include/dplyr/SubsetVectorVisitorImpl.h +++ b/inst/include/dplyr/SubsetVectorVisitorImpl.h @@ -152,6 +152,59 @@ namespace dplyr { } ; + class DateSubsetVectorVisitor : public SubsetVectorVisitor { + public: + + DateSubsetVectorVisitor( SEXP data ) : impl(0){ + if( TYPEOF(data) == INTSXP ) { + impl = new SubsetVectorVisitorImpl(data) ; + } else if( TYPEOF(data) == REALSXP ) { + impl = new SubsetVectorVisitorImpl(data) ; + } else { + stop( "" ) ; + } + } + + ~DateSubsetVectorVisitor( ){ + delete impl ; + } + + virtual SEXP subset( const Rcpp::IntegerVector& index ) const { + return impl->subset( index ) ; + } + + virtual SEXP subset( const std::vector& index ) const { + return impl->subset( index ) ; + } + + virtual SEXP subset( const ChunkIndexMap& index ) const { + return impl->subset(index) ; + } + + virtual SEXP subset( const Rcpp::LogicalVector& index ) const { + return impl->subset( index ) ; + } + + virtual SEXP subset( EmptySubset index ) const { + return impl->subset( index ) ; + } + + virtual int size() const { + return impl->size() ; + } + + virtual std::string get_r_type() const { + return impl->get_r_type() ; + } + + private: + SubsetVectorVisitor* impl ; + DateSubsetVectorVisitor( const DateSubsetVectorVisitor& ) ; + + } ; + + + } #endif diff --git a/inst/include/dplyr/subset_visitor.h b/inst/include/dplyr/subset_visitor.h index 64d8ab6ab8..5835dfeb5b 100644 --- a/inst/include/dplyr/subset_visitor.h +++ b/inst/include/dplyr/subset_visitor.h @@ -18,6 +18,10 @@ namespace dplyr { } } + if( Rf_inherits(vec, "Date") ){ + return new DateSubsetVectorVisitor(vec) ; + } + switch( TYPEOF(vec) ){ case CPLXSXP: return new SubsetVectorVisitorImpl( vec ) ;