From konr@d@@|ek @end|ng |rom gm@||@com  Thu Jul  1 12:16:08 2021
From: konr@d@@|ek @end|ng |rom gm@||@com (Konrad Siek)
Date: Thu, 1 Jul 2021 12:16:08 +0200
Subject: [Rd] [External] SET_COMPLEX_ELT and SET_RAW_ELT missing from
 Rinternals.h
In-Reply-To: <335585-e80-509f-9598-4b737b5ccba9@uiowa.edu>
References: <CAN6cAk1T4sQFMZXtNqjTKJCQyn_21ic1zAm6P=rQZxy4uAikfg@mail.gmail.com>
 <335585-e80-509f-9598-4b737b5ccba9@uiowa.edu>
Message-ID: <CAN6cAk0g9b8jfALE2TjnNv_F7WobMBEaAii5i1PzzdQKYAz5pw@mail.gmail.com>

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]]



[Rd] [External] SET_COMPLEX_ELT and SET_RAW_ELT missing from Rinternals.h
Konrad Siek