Re: [Rd] How to store void* on 64 bit machines

From: Prof Brian Ripley <ripley_at_stats.ox.ac.uk>
Date: Wed 16 Mar 2005 - 00:12:09 GMT

On Tue, 15 Mar 2005, Prof Brian Ripley wrote:

> On Tue, 15 Mar 2005, Vadim Ogranovich wrote:
>
>> I have an R class which represents a file stream (this is my custom
>> implementation of R I/O and has nothing to do with the standard R
>> connections). The class has a slot, called id, which is essentially a
>> void* pointer to a C++ stream object.
>>
>> Up until now I worked on 32-bit machines and the id slot was an integer,
>
> If by `slot' you mean the slot in an S4 class, that is not correct.
> R has integer vectors, not integer scalars.
>
>> so one could cast back and forth between int and void*. However, on
>> 64-bits void* is castable to 'long int', but not int, which poses a
>> couple of problems:
>> a) since there is no R arrays of 'long int' type what other built-in
>> type can I use to store void*. For example double is big enough to
>> accommodate void*, but I am not sure whether casting will work both
>> ways.
>>
>> b) assuming that a) is solvable, is there a solution which is portable
>> between 64 and 32 bit machines?
>
> The raw type can store anything: your pointer is just a stream of bytes.
> It could also be stored as one or two integers.

Depending what you want to do with this pointer and if there is only one of them, the externalptr type might be an even better match -- be careful about the non-copy-on-change semantics of that type.

-- 
Brian D. Ripley,                  ripley@stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

______________________________________________
R-devel@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Received on Wed Mar 16 11:14:38 2005

This archive was generated by hypermail 2.1.8 : Mon 24 Oct 2005 - 22:26:30 GMT