00001 // -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- 00002 // 00003 // RcppDatetimeVector.cpp: Rcpp R/C++ interface class library -- Datetime vector support 00004 // 00005 // Copyright (C) 2008 - 2009 Dirk Eddelbuettel 00006 // 00007 // This file is part of Rcpp. 00008 // 00009 // Rcpp is free software: you can redistribute it and/or modify it 00010 // under the terms of the GNU General Public License as published by 00011 // the Free Software Foundation, either version 2 of the License, or 00012 // (at your option) any later version. 00013 // 00014 // Rcpp is distributed in the hope that it will be useful, but 00015 // WITHOUT ANY WARRANTY; without even the implied warranty of 00016 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00017 // GNU General Public License for more details. 00018 // 00019 // You should have received a copy of the GNU General Public License 00020 // along with Rcpp. If not, see <http://www.gnu.org/licenses/>. 00021 00022 #include <RcppDatetimeVector.h> 00023 00024 RcppDatetimeVector::RcppDatetimeVector(SEXP vec) { 00025 int i; 00026 if (!Rf_isNumeric(vec) || Rf_isMatrix(vec) || Rf_isLogical(vec)) 00027 throw std::range_error("RcppDatetimeVector: invalid numeric vector in constructor"); 00028 int len = Rf_length(vec); 00029 if (len == 0) 00030 throw std::range_error("RcppDatetimeVector: null vector in constructor"); 00031 v = new RcppDatetime[len]; 00032 for (i = 0; i < len; i++) 00033 v[i] = RcppDatetime(REAL(vec)[i]); 00034 length = len; 00035 } 00036 00037 RcppDatetimeVector::~RcppDatetimeVector() { 00038 delete [] v; 00039 } 00040 00041 RcppDatetime & RcppDatetimeVector::operator()(int i) const { 00042 if (i < 0 || i >= length) { 00043 std::ostringstream oss; 00044 oss << "RcppDatetimeVector: subscript out of range: " << i; 00045 throw std::range_error(oss.str()); 00046 } 00047 return v[i]; 00048 } 00049 00050 int RcppDatetimeVector::size() const { 00051 return length; 00052 } 00053