2
2
//
3
3
// barrier.cpp: Rcpp R/C++ interface class library -- write barrier
4
4
//
5
- // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois
5
+ // Copyright (C) 2010 - 2015 Dirk Eddelbuettel and Romain Francois
6
6
//
7
7
// This file is part of Rcpp.
8
8
//
29
29
#include < Rcpp/protection/Shield.h>
30
30
31
31
// [[Rcpp::register]]
32
- SEXP get_string_elt (SEXP x, int i){
33
- return STRING_ELT (x, i ) ;
32
+ SEXP get_string_elt (SEXP x, int i) {
33
+ return STRING_ELT (x, i) ;
34
34
}
35
35
36
36
// [[Rcpp::register]]
37
- const char * char_get_string_elt (SEXP x, int i){
38
- return CHAR (STRING_ELT (x, i )) ;
37
+ const char * char_get_string_elt (SEXP x, int i) {
38
+ return CHAR (STRING_ELT (x, i)) ;
39
39
}
40
40
41
41
// [[Rcpp::register]]
42
- void set_string_elt (SEXP x, int i, SEXP value){
43
- STRING_ELT (x, i) = value ;
42
+ void set_string_elt (SEXP x, int i, SEXP value) {
43
+ STRING_ELT (x, i) = value;
44
44
}
45
45
46
46
// [[Rcpp::register]]
47
- void char_set_string_elt (SEXP x, int i, const char * value){
48
- STRING_ELT (x, i) = Rf_mkChar (value) ;
47
+ void char_set_string_elt (SEXP x, int i, const char * value) {
48
+ STRING_ELT (x, i) = Rf_mkChar (value);
49
49
}
50
50
51
51
// [[Rcpp::register]]
52
- SEXP* get_string_ptr (SEXP x){
53
- return STRING_PTR (x) ;
52
+ SEXP* get_string_ptr (SEXP x) {
53
+ return STRING_PTR (x);
54
54
}
55
55
56
56
// [[Rcpp::register]]
57
- SEXP get_vector_elt (SEXP x, int i){
58
- return VECTOR_ELT (x, i ) ;
57
+ SEXP get_vector_elt (SEXP x, int i) {
58
+ return VECTOR_ELT (x, i) ;
59
59
}
60
60
61
61
// [[Rcpp::register]]
62
- void set_vector_elt (SEXP x, int i, SEXP value){
63
- SET_VECTOR_ELT (x, i, value ) ;
62
+ void set_vector_elt (SEXP x, int i, SEXP value) {
63
+ SET_VECTOR_ELT (x, i, value) ;
64
64
}
65
65
66
66
// [[Rcpp::register]]
67
- SEXP* get_vector_ptr (SEXP x){
68
- return VECTOR_PTR (x) ;
67
+ SEXP* get_vector_ptr (SEXP x) {
68
+ return VECTOR_PTR (x);
69
69
}
70
70
71
71
// [[Rcpp::register]]
72
- void * dataptr (SEXP x){
72
+ void * dataptr (SEXP x) {
73
73
return DATAPTR (x);
74
74
}
75
75
76
76
// [[Rcpp::register]]
77
- const char * char_nocheck ( SEXP x ) {
77
+ const char * char_nocheck (SEXP x) {
78
78
return CHAR (x);
79
79
}
80
80
81
- static bool Rcpp_cache_know = false ;
82
- static SEXP Rcpp_cache = R_NilValue ;
81
+ static bool Rcpp_cache_know = false ;
82
+ static SEXP Rcpp_cache = R_NilValue;
83
83
84
84
#define RCPP_HASH_CACHE_INDEX 4
85
85
#define RCPP_CACHE_SIZE 5
@@ -90,120 +90,120 @@ static SEXP Rcpp_cache = R_NilValue ;
90
90
91
91
// only used for debugging
92
92
SEXP get_rcpp_cache () {
93
- if ( ! Rcpp_cache_know ) {
93
+ if ( ! Rcpp_cache_know) {
94
94
95
95
SEXP getNamespaceSym = Rf_install (" getNamespace" ); // cannot be gc()'ed once in symbol table
96
- Rcpp::Shield<SEXP> RcppString ( Rf_mkString (" Rcpp" ) );
97
- Rcpp::Shield<SEXP> call ( Rf_lang2 ( getNamespaceSym, RcppString ) );
98
- Rcpp::Shield<SEXP> RCPP ( Rf_eval (call, R_GlobalEnv) ) ;
96
+ Rcpp::Shield<SEXP> RcppString (Rf_mkString (" Rcpp" ));
97
+ Rcpp::Shield<SEXP> call (Rf_lang2 (getNamespaceSym, RcppString) );
98
+ Rcpp::Shield<SEXP> RCPP (Rf_eval (call, R_GlobalEnv)) ;
99
99
100
- Rcpp_cache = Rf_findVarInFrame ( RCPP, Rf_install (" .rcpp_cache" ) ) ;
101
- Rcpp_cache_know = true ;
100
+ Rcpp_cache = Rf_findVarInFrame (RCPP, Rf_install (" .rcpp_cache" )) ;
101
+ Rcpp_cache_know = true ;
102
102
}
103
- return Rcpp_cache ;
103
+ return Rcpp_cache;
104
104
}
105
105
106
106
namespace Rcpp {
107
107
namespace internal {
108
108
// [[Rcpp::register]]
109
- SEXP get_Rcpp_namespace (){
110
- return VECTOR_ELT ( get_rcpp_cache () , 0 ) ;
109
+ SEXP get_Rcpp_namespace () {
110
+ return VECTOR_ELT (get_rcpp_cache () , 0 ) ;
111
111
}
112
112
}
113
113
}
114
114
115
115
// [[Rcpp::register]]
116
- SEXP rcpp_get_stack_trace (){
117
- return VECTOR_ELT ( get_rcpp_cache (), 3 ) ;
116
+ SEXP rcpp_get_stack_trace () {
117
+ return VECTOR_ELT (get_rcpp_cache (), 3 ) ;
118
118
}
119
119
120
120
// [[Rcpp::register]]
121
- SEXP rcpp_set_stack_trace (SEXP e){
122
- SET_VECTOR_ELT ( get_rcpp_cache (), 3 , e ) ;
123
- return R_NilValue ;
121
+ SEXP rcpp_set_stack_trace (SEXP e) {
122
+ SET_VECTOR_ELT (get_rcpp_cache (), 3 , e) ;
123
+ return R_NilValue;
124
124
}
125
125
126
- SEXP set_error_occured (SEXP cache, SEXP e){
127
- SET_VECTOR_ELT ( cache, 1 , e ) ;
128
- return R_NilValue ;
126
+ SEXP set_error_occured (SEXP cache, SEXP e) {
127
+ SET_VECTOR_ELT (cache, 1 , e) ;
128
+ return R_NilValue;
129
129
}
130
130
131
- SEXP set_current_error (SEXP cache, SEXP e){
132
- SET_VECTOR_ELT ( cache, 2 , e ) ;
133
- return R_NilValue ;
131
+ SEXP set_current_error (SEXP cache, SEXP e) {
132
+ SET_VECTOR_ELT (cache, 2 , e) ;
133
+ return R_NilValue;
134
134
}
135
135
136
- SEXP init_Rcpp_cache (){
136
+ SEXP init_Rcpp_cache () {
137
137
SEXP getNamespaceSym = Rf_install (" getNamespace" ); // cannot be gc()'ed once in symbol table
138
- Rcpp::Shield<SEXP> RcppString ( Rf_mkString (" Rcpp" ) );
139
- Rcpp::Shield<SEXP> call ( Rf_lang2 ( getNamespaceSym, RcppString ) );
140
- Rcpp::Shield<SEXP> RCPP ( Rf_eval (call, R_GlobalEnv) ) ;
141
- Rcpp::Shield<SEXP> cache ( Rf_allocVector ( VECSXP, RCPP_CACHE_SIZE ) );
138
+ Rcpp::Shield<SEXP> RcppString (Rf_mkString (" Rcpp" ));
139
+ Rcpp::Shield<SEXP> call (Rf_lang2 (getNamespaceSym, RcppString) );
140
+ Rcpp::Shield<SEXP> RCPP (Rf_eval (call, R_GlobalEnv)) ;
141
+ Rcpp::Shield<SEXP> cache (Rf_allocVector (VECSXP, RCPP_CACHE_SIZE) );
142
142
143
143
// the Rcpp namespace
144
- SET_VECTOR_ELT ( cache, 0 , RCPP ) ;
145
- set_error_occured ( cache, Rf_ScalarLogical (FALSE ) ) ; // error occured
146
- set_current_error ( cache, R_NilValue ) ; // current error
147
- SET_VECTOR_ELT ( cache, 3 , R_NilValue ) ; // stack trace
148
- Rcpp::Shield<SEXP> tmp ( Rf_allocVector (INTSXP, RCPP_HASH_CACHE_INITIAL_SIZE) );
149
- SET_VECTOR_ELT ( cache, RCPP_HASH_CACHE_INDEX, tmp );
150
- Rf_defineVar ( Rf_install (" .rcpp_cache" ), cache, RCPP );
144
+ SET_VECTOR_ELT (cache, 0 , RCPP) ;
145
+ set_error_occured (cache, Rf_ScalarLogical (FALSE )) ; // error occured
146
+ set_current_error (cache, R_NilValue) ; // current error
147
+ SET_VECTOR_ELT (cache, 3 , R_NilValue) ; // stack trace
148
+ Rcpp::Shield<SEXP> tmp (Rf_allocVector (INTSXP, RCPP_HASH_CACHE_INITIAL_SIZE));
149
+ SET_VECTOR_ELT (cache, RCPP_HASH_CACHE_INDEX, tmp);
150
+ Rf_defineVar (Rf_install (" .rcpp_cache" ), cache, RCPP);
151
151
152
- return cache ;
152
+ return cache;
153
153
}
154
154
155
155
// [[Rcpp::register]]
156
- SEXP reset_current_error (){
157
- SEXP cache = get_rcpp_cache () ;
156
+ SEXP reset_current_error () {
157
+ SEXP cache = get_rcpp_cache ();
158
158
159
159
// error occured
160
- set_error_occured ( cache, Rf_ScalarLogical (FALSE ) ) ;
160
+ set_error_occured (cache, Rf_ScalarLogical (FALSE )) ;
161
161
162
162
// current error
163
- set_current_error ( cache, R_NilValue ) ;
163
+ set_current_error (cache, R_NilValue) ;
164
164
165
165
// stack trace
166
- SET_VECTOR_ELT ( cache, 3 , R_NilValue ) ;
166
+ SET_VECTOR_ELT (cache, 3 , R_NilValue) ;
167
167
168
- return R_NilValue ;
168
+ return R_NilValue;
169
169
}
170
170
171
171
// [[Rcpp::register]]
172
- int error_occured (){
173
- SEXP err = VECTOR_ELT ( get_rcpp_cache (), 1 ) ;
174
- return LOGICAL (err)[0 ] ;
172
+ int error_occured () {
173
+ SEXP err = VECTOR_ELT (get_rcpp_cache (), 1 ) ;
174
+ return LOGICAL (err)[0 ];
175
175
}
176
176
177
177
// [[Rcpp::internal]]
178
- SEXP rcpp_error_recorder (SEXP e){
179
- SEXP cache = get_rcpp_cache () ;
178
+ SEXP rcpp_error_recorder (SEXP e) {
179
+ SEXP cache = get_rcpp_cache ();
180
180
181
181
// error occured
182
- set_error_occured ( cache, Rf_ScalarLogical (TRUE ) ) ;
182
+ set_error_occured (cache, Rf_ScalarLogical (TRUE )) ;
183
183
184
184
// current error
185
- set_current_error (cache, e ) ;
185
+ set_current_error (cache, e) ;
186
186
187
- return R_NilValue ;
187
+ return R_NilValue;
188
188
}
189
189
190
190
// [[Rcpp::register]]
191
- SEXP rcpp_get_current_error (){
192
- return VECTOR_ELT ( get_rcpp_cache (), 2 ) ;
191
+ SEXP rcpp_get_current_error () {
192
+ return VECTOR_ELT (get_rcpp_cache (), 2 ) ;
193
193
}
194
194
195
195
// [[Rcpp::register]]
196
- int * get_cache ( int m){
197
- SEXP cache = get_rcpp_cache () ;
198
- SEXP hash_cache = VECTOR_ELT ( cache, RCPP_HASH_CACHE_INDEX) ;
199
- int n = Rf_length (hash_cache) ;
200
- if ( m > n ) {
201
- Rcpp::Shield<SEXP> new_hash_cache ( Rf_allocVector ( INTSXP, m) ) ;
202
- hash_cache = new_hash_cache ;
196
+ int * get_cache (int m) {
197
+ SEXP cache = get_rcpp_cache ();
198
+ SEXP hash_cache = VECTOR_ELT (cache, RCPP_HASH_CACHE_INDEX);
199
+ int n = Rf_length (hash_cache);
200
+ if ( m > n) {
201
+ Rcpp::Shield<SEXP> new_hash_cache (Rf_allocVector (INTSXP, m)) ;
202
+ hash_cache = new_hash_cache;
203
203
SET_VECTOR_ELT (cache,RCPP_HASH_CACHE_INDEX, hash_cache);
204
204
}
205
- int *res = INTEGER (hash_cache) ;
206
- std::fill (res, res+m, 0 ) ;
207
- return res ;
205
+ int *res = INTEGER (hash_cache);
206
+ std::fill (res, res+m, 0 ) ;
207
+ return res;
208
208
}
209
209
0 commit comments