[External] R C api for 'inherits' S3 and S4 objects
Thank you Luke. That is why I don't use Rf_inherits but INHERITS which does not allocate, provided in the email body. I cannot do similarly for S4 classes, thus asking for some API for that.
On Fri, Nov 1, 2019 at 5:56 PM Tierney, Luke <luke-tierney at uiowa.edu> wrote:
On Fri, 1 Nov 2019, Jan Gorecki wrote:
Dear R developers, Motivated by discussion about checking inheritance of S3 and S4 objects (in head matrix/array topic) I would light to shed some light on a minor gap about that matter in R C API. Currently we are able to check inheritance for S3 class objects from C in a robust way (no allocation, thread safe). This is unfortunately
Your premise is not correct. Rf_inherits will not GC but it can allocate and is not thread safe. Best, luke
not possible for S4 classes. I would kindly request new function in R
C api so it can be achieved for S4 classes with no risk of allocation.
For reference mentioned functions below. Thank you.
Jan Gorecki
// S3 inheritance
bool INHERITS(SEXP x, SEXP char_) {
SEXP klass;
if (isString(klass = getAttrib(x, R_ClassSymbol))) {
for (int i=0; i<LENGTH(klass); i++) {
if (STRING_ELT(klass, i) == char_) return true;
}
}
return false;
}
// S4 inheritance
bool Rinherits(SEXP x, SEXP char_) {
SEXP vec = PROTECT(ScalarString(char_));
SEXP call = PROTECT(lang3(sym_inherits, x, vec));
bool ans = LOGICAL(eval(call, R_GlobalEnv))[0]==1;
UNPROTECT(2);
return ans;
}
______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
--
Luke Tierney
Ralph E. Wareham Professor of Mathematical Sciences
University of Iowa Phone: 319-335-3386
Department of Statistics and Fax: 319-335-3017
Actuarial Science
241 Schaeffer Hall email: luke-tierney at uiowa.edu
Iowa City, IA 52242 WWW: http://www.stat.uiowa.edu