Rcpp Version 0.9.10
Promise.cpp
Go to the documentation of this file.
00001 // -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*-
00002 //
00003 // Promise.h: Rcpp R/C++ interface class library -- promises (PROMSXP)
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 #include <Rcpp/Promise.h>
00023 
00024 namespace Rcpp {
00025 
00026     Promise::Promise(SEXP x) : RObject(){
00027         if( TYPEOF(x) == PROMSXP ){
00028             setSEXP( x ) ;
00029         } else{
00030             throw not_compatible("not a promise") ;
00031         }
00032     }
00033 
00034     Promise::Promise(const Promise& other) : RObject() {
00035         setSEXP( other.asSexp() );
00036     }
00037         
00038     Promise& Promise::operator=(const Promise& other){
00039         setSEXP( other.asSexp() );
00040         return *this ;
00041     }
00042         
00043     int Promise::seen() const {
00044         return PRSEEN(m_sexp);
00045     }
00046 
00047     SEXP Promise::value() const {
00048         SEXP val = PRVALUE(m_sexp) ; 
00049         if( val == R_UnboundValue ) throw unevaluated_promise() ;
00050         return val ;
00051     }
00052         
00053     bool Promise::was_evaluated() const {
00054         return PRVALUE(m_sexp) != R_UnboundValue ;
00055     }
00056 
00057     Environment Promise::environment() const {
00058         return Environment(PRENV(m_sexp)) ;
00059     }
00060 
00061     ExpressionVector Promise::expression() const {
00062         return ExpressionVector(PRCODE(m_sexp)) ;
00063     }
00064         
00065 } // namespace
00066 
 All Classes Namespaces Files Functions Variables Typedefs Enumerator Friends Defines