Rcpp Version 0.9.10
00_forward_eval_methods.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 // eval_methods.h: Rcpp R/C++ interface class library -- 
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__vector__forward_eval_methods_h
00023 #define Rcpp__vector__forward_eval_methods_h
00024 
00025 namespace internal{
00026     template <int RTYPE>
00027     SEXP vector_from_string( const std::string& st ) {
00028         return r_cast<RTYPE>( Rf_mkString( st.c_str() ) ) ;
00029     }
00030         
00031     template <int RTYPE>
00032     SEXP vector_from_string_expr( const std::string& code) {
00033         ParseStatus status;
00034         SEXP expr = PROTECT( ::Rf_mkString( code.c_str() ) );
00035         SEXP res  = PROTECT( ::R_ParseVector(expr, -1, &status, R_NilValue));
00036         switch( status ){
00037         case PARSE_OK:
00038             UNPROTECT( 2) ;
00039             return(res) ;
00040             break;
00041         default:
00042             UNPROTECT(2) ;
00043             throw parse_error() ;
00044         }
00045         return R_NilValue ; /* -Wall */
00046     }
00047         
00048     template <>
00049     inline SEXP vector_from_string<EXPRSXP>( const std::string& st ) {
00050         return vector_from_string_expr<EXPRSXP>( st ) ;
00051     }
00052         
00053     template <int RTYPE> class eval_methods {} ;
00054     template <> class eval_methods<EXPRSXP> ;
00055         
00056 }
00057 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerator Friends Defines