Rcpp Version 1.0.14
Loading...
Searching...
No Matches
Shield.h
Go to the documentation of this file.
1// Copyright (C) 2013 Romain Francois and Kevin Ushey
2//
3// This file is part of Rcpp.
4//
5// Rcpp is free software: you can redistribute it and/or modify it
6// under the terms of the GNU General Public License as published by
7// the Free Software Foundation, either version 2 of the License, or
8// (at your option) any later version.
9//
10// Rcpp is distributed in the hope that it will be useful, but
11// WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13// GNU General Public License for more details.
14//
15// You should have received a copy of the GNU General Public License
16// along with Rcpp. If not, see <http://www.gnu.org/licenses/>.
17
18#ifndef Rcpp__protection_Shield_h
19#define Rcpp__protection_Shield_h
20
21namespace Rcpp{
22
24 if( x != R_NilValue ) PROTECT(x) ;
25 return x ;
26 }
27
28 inline void Rcpp_unprotect(int i){
29 // Prefer this function over UNPROTECT() in Rcpp so that all
30 // balance checks errors by rchk are contained at one location (#892)
31 UNPROTECT(i);
32 }
33
34 template <typename T>
35 class Shield{
36 public:
39 if( t != R_NilValue ) Rcpp_unprotect(1) ;
40 }
41
42 operator SEXP() const { return t; }
44
45 private:
46 Shield( const Shield& ) ;
47 Shield& operator=( const Shield& ) ;
48 } ;
49
50
51
52}
53
54#endif
Shield(const Shield &)
Shield(SEXP t_)
Definition Shield.h:37
Shield & operator=(const Shield &)
Rcpp API.
Definition algo.h:28
SEXP Rcpp_protect(SEXP x)
Definition Shield.h:23
void Rcpp_unprotect(int i)
Definition Shield.h:28
T as(SEXP x)
Definition as.h:151