The R Project SVN R

Rev

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

Rev 51638 Rev 51648
Line 473... Line 473...
473
    s = allocVector(type, n);
473
    s = allocVector(type, n);
474
    rawptr = (Rbyte *)p;
474
    rawptr = (Rbyte *)p;
475
    for (i = 0; i < n; i++) RAW(s)[i] = rawptr[i];
475
    for (i = 0; i < n; i++) RAW(s)[i] = rawptr[i];
476
    break;
476
    break;
477
    case LGLSXP:
477
    case LGLSXP:
-
 
478
	s = allocVector(type, n);
-
 
479
	iptr = (int*)p;
-
 
480
	for(i = 0 ; i < n ; i++) {
-
 
481
	    int tmp =  iptr[i];
478
	/* FIXME: should this not force 0, 1, NA_LOGICAL? */
482
	    LOGICAL(s)[i] = (tmp == NA_INTEGER || tmp == 0) ? tmp : 1;
-
 
483
	}
-
 
484
	break;
479
    case INTSXP:
485
    case INTSXP:
480
	s = allocVector(type, n);
486
	s = allocVector(type, n);
481
	iptr = (int*)p;
487
	iptr = (int*)p;
482
	for(i = 0 ; i < n ; i++) INTEGER(s)[i] = iptr[i];
488
	for(i = 0 ; i < n ; i++) INTEGER(s)[i] = iptr[i];
483
	break;
489
	break;
484
    case REALSXP:
490
    case REALSXP:
485
    case SINGLESXP:
491
    case SINGLESXP:
486
	s = allocVector(REALSXP, n);
492
	s = allocVector(REALSXP, n);
487
	if(type == SINGLESXP || asLogical(getAttrib(arg, CSingSymbol)) == 1) {
493
	if(type == SINGLESXP || asLogical(getAttrib(arg, CSingSymbol)) == 1) {
488
	    sptr = (float*) p;
494
	    sptr = (float*) p;
489
	    for(i=0 ; i<n ; i++) REAL(s)[i] = (double) sptr[i];
495
	    for(i = 0 ; i < n ; i++) REAL(s)[i] = (double) sptr[i];
490
	} else {
496
	} else {
491
	    rptr = (double*) p;
497
	    rptr = (double*) p;
492
	    for(i = 0 ; i < n ; i++) REAL(s)[i] = rptr[i];
498
	    for(i = 0 ; i < n ; i++) REAL(s)[i] = rptr[i];
493
	}
499
	}
494
	break;
500
	break;