The R Project SVN R

Rev

Rev 33387 | Rev 34581 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 33387 Rev 34300
Line 205... Line 205...
205
 
205
 
206
static void *RObjToCPtr(SEXP s, int naok, int dup, int narg, int Fort,
206
static void *RObjToCPtr(SEXP s, int naok, int dup, int narg, int Fort,
207
			const char *name, R_toCConverter **converter,
207
			const char *name, R_toCConverter **converter,
208
			int targetType, char* encname)
208
			int targetType, char* encname)
209
{
209
{
-
 
210
    unsigned char *rawptr;
210
    int *iptr;
211
    int *iptr;
211
    float *sptr;
212
    float *sptr;
212
    double *rptr;
213
    double *rptr;
213
    char **cptr, *fptr;
214
    char **cptr, *fptr;
214
    Rcomplex *zptr;
215
    Rcomplex *zptr;
Line 243... Line 244...
243
	if(targetType != SINGLESXP)
244
	if(targetType != SINGLESXP)
244
	    s = coerceVector(s, targetType);
245
	    s = coerceVector(s, targetType);
245
    }
246
    }
246
 
247
 
247
    switch(TYPEOF(s)) {
248
    switch(TYPEOF(s)) {
-
 
249
    case RAWSXP:
-
 
250
    n = LENGTH(s);
-
 
251
    rawptr = RAW(s);
-
 
252
    if (dup) {
-
 
253
        rawptr = (unsigned char *) R_alloc(n, sizeof(unsigned char));
-
 
254
        for (i = 0; i < n; i++)
-
 
255
            rawptr[i] = RAW(s)[i];
-
 
256
    }
-
 
257
    return (void *) rawptr;
-
 
258
    break;
248
    case LGLSXP:
259
    case LGLSXP:
249
    case INTSXP:
260
    case INTSXP:
250
	n = LENGTH(s);
261
	n = LENGTH(s);
251
	iptr = INTEGER(s);
262
	iptr = INTEGER(s);
252
	for (i = 0 ; i < n ; i++) {
263
	for (i = 0 ; i < n ; i++) {
Line 379... Line 390...
379
 
390
 
380
 
391
 
381
static SEXP CPtrToRObj(void *p, SEXP arg, int Fort,
392
static SEXP CPtrToRObj(void *p, SEXP arg, int Fort,
382
		       R_NativePrimitiveArgType type, char *encname)
393
		       R_NativePrimitiveArgType type, char *encname)
383
{
394
{
-
 
395
    unsigned char *rawptr;
384
    int *iptr, n=length(arg);
396
    int *iptr, n=length(arg);
385
    float *sptr;
397
    float *sptr;
386
    double *rptr;
398
    double *rptr;
387
    char **cptr, buf[256];
399
    char **cptr, buf[256];
388
    Rcomplex *zptr;
400
    Rcomplex *zptr;
389
    SEXP *lptr, CSingSymbol = install("Csingle");
401
    SEXP *lptr, CSingSymbol = install("Csingle");
390
    int i;
402
    int i;
391
    SEXP s, t;
403
    SEXP s, t;
392
 
404
 
393
    switch(type) {
405
    switch(type) {
-
 
406
    case RAWSXP:
-
 
407
    s = allocVector(type, n);
-
 
408
    rawptr = (unsigned char *)p;
-
 
409
    for (i = 0; i < n; i++)
-
 
410
        RAW(s)[i] = rawptr[i];
-
 
411
    break;
394
    case LGLSXP:
412
    case LGLSXP:
395
    case INTSXP:
413
    case INTSXP:
396
	s = allocVector(type, n);
414
	s = allocVector(type, n);
397
	iptr = (int*)p;
415
	iptr = (int*)p;
398
	for(i=0 ; i<n ; i++)
416
	for(i=0 ; i<n ; i++)