Konrad Siek
2021-Jun-25 14:28 UTC
[Rd] SET_COMPLEX_ELT and SET_RAW_ELT missing from Rinternals.h
Hello, I am working on a package that works with various types of R vectors, implemented in C. My code has a lot of SET_*_ELT operations in it for various types of vectors, including for CPLXSXPs and RAWSXPs. I noticed SET_COMPLEX_ELT and SET_RAW_ELT are defined in Rinlinedfuns.h but not declared in Rinternals.h, so they cannot be used in packages. I was going to re-implement them or extern them in my package, however, interestingly, ALTCOMPLEX_SET_ELT and ALTRAW_SET_ELT are both declared in Rinternals.h, making me think SET_COMPLEX_ELT and SET_RAW_ELT could be purposefully obscured. Otherwise it may just be an oversight and I should bring it to someone's attention anyway. I have three questions that I hope R-devel could help me with. 1. Is this an oversight, or are SET_COMPLEX_ELT and SET_RAW_ELT not exposed on purpose? 2. If they are not exposed on purpose, I was wondering why. 3. More importantly, what would be good ways to set elements of these vectors while playing nice with ALTREP and avoiding whatever pitfalls caused these functions to be obscured in the first place? Best regards, Konrad, [[alternative HTML version deleted]]
iuke-tier@ey m@iii@g oii uiow@@edu
2021-Jun-29 02:06 UTC
[Rd] [External] SET_COMPLEX_ELT and SET_RAW_ELT missing from Rinternals.h
The setter interface for atomic types is not yer implemented. It may be some day. Best, luke On Fri, 25 Jun 2021, Konrad Siek wrote:> Hello, > > I am working on a package that works with various types of R vectors, > implemented in C. My code has a lot of SET_*_ELT operations in it for > various types of vectors, including for CPLXSXPs and RAWSXPs. > > I noticed SET_COMPLEX_ELT and SET_RAW_ELT are defined in Rinlinedfuns.h but > not declared in Rinternals.h, so they cannot be used in packages. I was > going to re-implement them or extern them in my package, however, > interestingly, ALTCOMPLEX_SET_ELT and ALTRAW_SET_ELT are both declared in > Rinternals.h, making me think SET_COMPLEX_ELT and SET_RAW_ELT could be > purposefully obscured. Otherwise it may just be an oversight and I should > bring it to someone's attention anyway. > > I have three questions that I hope R-devel could help me with. > > 1. Is this an oversight, or are SET_COMPLEX_ELT and SET_RAW_ELT not exposed > on purpose? 2. If they are not exposed on purpose, I was wondering why. > 3. More importantly, what would be good ways to set elements of these > vectors while playing nice with ALTREP and avoiding whatever pitfalls > caused these functions to be obscured in the first place? > > Best regards, > Konrad, > > [[alternative HTML version deleted]] > > ______________________________________________ > 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
Konrad Siek
2021-Jul-01 10:16 UTC
[Rd] [External] SET_COMPLEX_ELT and SET_RAW_ELT missing from Rinternals.h
Thanks! So what would be the prescribed way of assigning elements to a CPLXSXP if I needed to? One way I see is to do what most of the code inside the interpreter does and grab the vector's data pointer: COMPLEX(sexp)[index] = value; COMPLEX0(sexp)[index] = value; This will materialize an ALTREP CPLXSXP though, so maybe the best way would be to mirror what SET_COMPLEX_ELT does in Rinlinedfuns.h? if (ALTREP(sexp)) ALTCOMPLEX_SET_ELT(sexp, index, value); else COMPLEX0(sexp)[index] = vector; This seems better, but it's not used in the interpreter anywhere as far as I can tell, presumably because of the setter interface not being complete, as you point out. But should I be avoiding this second approach for some reaosn? k On Tue, Jun 29, 2021 at 4:06 AM <luke-tierney at uiowa.edu> wrote:> The setter interface for atomic types is not yer implemented. It may > be some day. > > Best, > > luke > > On Fri, 25 Jun 2021, Konrad Siek wrote: > > > Hello, > > > > I am working on a package that works with various types of R vectors, > > implemented in C. My code has a lot of SET_*_ELT operations in it for > > various types of vectors, including for CPLXSXPs and RAWSXPs. > > > > I noticed SET_COMPLEX_ELT and SET_RAW_ELT are defined in Rinlinedfuns.h > but > > not declared in Rinternals.h, so they cannot be used in packages. I was > > going to re-implement them or extern them in my package, however, > > interestingly, ALTCOMPLEX_SET_ELT and ALTRAW_SET_ELT are both declared > in > > Rinternals.h, making me think SET_COMPLEX_ELT and SET_RAW_ELT could be > > purposefully obscured. Otherwise it may just be an oversight and I should > > bring it to someone's attention anyway. > > > > I have three questions that I hope R-devel could help me with. > > > > 1. Is this an oversight, or are SET_COMPLEX_ELT and SET_RAW_ELT not > exposed > > on purpose? 2. If they are not exposed on purpose, I was wondering why. > > 3. More importantly, what would be good ways to set elements of these > > vectors while playing nice with ALTREP and avoiding whatever pitfalls > > caused these functions to be obscured in the first place? > > > > Best regards, > > Konrad, > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > 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 >[[alternative HTML version deleted]]