|
Rcpp Version 0.9.10
|
00001 // -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- 00002 // 00003 // DataFrame.h: Rcpp R/C++ interface class library -- data frames 00004 // 00005 // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois 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 #ifndef Rcpp__DataFrame_h 00023 #define Rcpp__DataFrame_h 00024 00025 #include <RcppCommon.h> 00026 #include <Rcpp/Vector.h> 00027 00028 namespace Rcpp{ 00029 00030 namespace internal{ 00031 inline SEXP empty_data_frame(){ 00032 SEXP dataFrameSym = ::Rf_install( "data.frame"); // cannot be gc()ed once in symbol table 00033 return ::Rf_eval( ::Rf_lang1( dataFrameSym ), R_GlobalEnv ) ; 00034 } 00035 } 00036 00037 class DataFrame : public List { 00038 public: 00039 DataFrame(): List( internal::empty_data_frame() ){} 00040 00041 DataFrame(SEXP x) : List(){ 00042 set(x) ; 00043 } 00044 00045 DataFrame( const DataFrame& other): List(other.asSexp()) {} 00046 00047 DataFrame( const RObject::SlotProxy& proxy ) { set(proxy); } 00048 DataFrame( const RObject::AttributeProxy& proxy ) { set(proxy); } 00049 00050 DataFrame& operator=( DataFrame& other){ 00051 setSEXP( other.asSexp() ) ; 00052 return *this ; 00053 } 00054 00055 DataFrame& operator=( SEXP x) { 00056 set(x) ; 00057 return *this ; 00058 } 00059 00060 ~DataFrame(){} 00061 00062 static DataFrame create(){ return DataFrame() ; } 00063 00064 #include <Rcpp/DataFrame_generated.h> 00065 00066 private: 00067 void set(SEXP x) { 00068 if( ::Rf_inherits( x, "data.frame" )){ 00069 setSEXP( x ) ; 00070 } else{ 00071 SEXP y = internal::convert_using_rfunction( x, "as.data.frame" ) ; 00072 setSEXP( y ) ; 00073 } 00074 } 00075 00076 } ; 00077 00078 } 00079 00080 #endif