From bill at insightful.com  Wed Jun  4 22:23:26 2008
From: bill at insightful.com (Bill Dunlap)
Date: Wed, 4 Jun 2008 13:23:26 -0700 (PDT)
Subject: [Rd] Splus/R typedef for C equivalent of S "integer"
In-Reply-To: <alpine.LFD.1.10.0806042044140.3688@gannet.stats.ox.ac.uk>
References: <Pine.GSO.4.56.0806041159280.791@octopus>
	<alpine.LFD.1.10.0806042044140.3688@gannet.stats.ox.ac.uk>
Message-ID: <Pine.GSO.4.56.0806041259250.24796@devsun3201.insightful.com>

On Wed, 4 Jun 2008, Prof Brian Ripley wrote:

> Bill,
>
> R's R.h already has
>
> typedef double Sfloat;
> typedef int Sint;
> #define SINT_MAX INT_MAX
> #define SINT_MIN INT_MIN

Whoops, I forgot the name and that I'd put it into
Splus's R.h (and now in someing included by it)
a while back.  Quite a few R packages use it.

I was looking through "Writing R Extensions" for mention
of such a thing and didn't find it.  Perhaps the 'int's
in the examples in Chapter 5 could be changed to 'Sint's.

A few packages (gee,lasso2,locfit,AnalyzeFMRI) used to
typedef Sint (for R and Splus), but since you already
have it in R we can go with it.

In the current development version of Splus it has an
associated #ifdef/#define so packages can avoid it if
needed:

  #ifndef HAVE_SINT_TYPEDEF
  typedef long Sint ; /* C type for S language "integer", is int in R */
  #define HAVE_SINT_TYPEDEF
  #endif

To make the packages even more portable with respect
to int/long things, we need to encourage the use of casts
when interfacing to non-S code.  E.g.,
  Sint x_zero = INTEGER(x)[0] ;
  Rprintf("First element of x is %ld\n", (long)x_zero);
will print x[0] properly in R and Splus but
  Rprintf("First element of x is %d\n", x_zero);
will not work properly in Splus.

Thanks,
  Bill

----------------------------------------------------------------------------
Bill Dunlap
Insightful Corporation
bill at insightful dot com
360-428-8146

 "All statements in this message represent the opinions of the author and do
 not necessarily reflect Insightful Corporation policy or position."



[Rd] Splus/R typedef for C equivalent of S "integer"
Bill Dunlap