From 7a81db0d18b22a0c115ca48d029189a9ad399834 Mon Sep 17 00:00:00 2001 From: Romain Francois Date: Fri, 14 Aug 2015 12:37:46 +0200 Subject: [PATCH] introduce DateSubsetVectorVisitor. #1204 --- inst/include/dplyr/SubsetVectorVisitorImpl.h | 53 ++++++++++++++++++++ inst/include/dplyr/subset_visitor.h | 4 ++ 2 files changed, 57 insertions(+) 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 ) ;