Rcpp Version 0.9.10
DataFrame.h
Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerator Friends Defines