Rev 3755 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
#include "ldense.h"/* dense logical Matrices "ldenseMatrix" classes --- almost identical to* dense nonzero-pattern: "ndenseMatrix" ones*//* this is very close to dspMatrix_as_dsy* () in ./dspMatrix.c : */SEXP lspMatrix_as_lsyMatrix(SEXP from, SEXP kind){SEXP val = PROTECT(NEW_OBJECT(MAKE_CLASS((asInteger(kind) == 1) ?"nsyMatrix" :"lsyMatrix"))),uplo = GET_SLOT(from, Matrix_uploSym),dimP = GET_SLOT(from, Matrix_DimSym),dmnP = GET_SLOT(from, Matrix_DimNamesSym);int n = *INTEGER(dimP);SET_SLOT(val, Matrix_DimSym, duplicate(dimP));SET_SLOT(val, Matrix_DimNamesSym, duplicate(dmnP));SET_SLOT(val, Matrix_uploSym, duplicate(uplo));packed_to_full_int(LOGICAL(ALLOC_SLOT(val, Matrix_xSym, LGLSXP, n*n)),LOGICAL( GET_SLOT(from, Matrix_xSym)), n,*CHAR(STRING_ELT(uplo, 0)) == 'U' ? UPP : LOW);UNPROTECT(1);return val;}/* this is very close to dsyMatrix_as_dsp* () in ./dsyMatrix.c : */SEXP lsyMatrix_as_lspMatrix(SEXP from, SEXP kind){SEXP val = PROTECT(NEW_OBJECT(MAKE_CLASS((asInteger(kind) == 1) ?"nspMatrix" :"lspMatrix"))),uplo = GET_SLOT(from, Matrix_uploSym),dimP = GET_SLOT(from, Matrix_DimSym);int n = *INTEGER(dimP);SET_SLOT(val, Matrix_DimSym, duplicate(dimP));SET_SLOT(val, Matrix_uploSym, duplicate(uplo));full_to_packed_int(LOGICAL(ALLOC_SLOT(val, Matrix_xSym, LGLSXP, (n*(n+1))/2)),LOGICAL( GET_SLOT(from, Matrix_xSym)), n,*CHAR(STRING_ELT(uplo, 0)) == 'U' ? UPP : LOW, NUN);UNPROTECT(1);return val;}/* this is very close to dtpMatrix_as_dtr* () in ./dtpMatrix.c : */SEXP ltpMatrix_as_ltrMatrix(SEXP from, SEXP kind){SEXP val = PROTECT(NEW_OBJECT(MAKE_CLASS((asInteger(kind) == 1) ?"ntrMatrix" :"ltrMatrix"))),uplo = GET_SLOT(from, Matrix_uploSym),diag = GET_SLOT(from, Matrix_diagSym),dimP = GET_SLOT(from, Matrix_DimSym),dmnP = GET_SLOT(from, Matrix_DimNamesSym);int n = *INTEGER(dimP);SET_SLOT(val, Matrix_DimSym, duplicate(dimP));SET_SLOT(val, Matrix_DimNamesSym, duplicate(dmnP));SET_SLOT(val, Matrix_diagSym, duplicate(diag));SET_SLOT(val, Matrix_uploSym, duplicate(uplo));packed_to_full_int(LOGICAL(ALLOC_SLOT(val, Matrix_xSym, LGLSXP, n*n)),LOGICAL(GET_SLOT(from, Matrix_xSym)), n,*CHAR(STRING_ELT(uplo, 0)) == 'U' ? UPP : LOW);UNPROTECT(1);return val;}/* this is very close to dtrMatrix_as_dtp* () in ./dtrMatrix.c : */SEXP ltrMatrix_as_ltpMatrix(SEXP from, SEXP kind){SEXP val = PROTECT(NEW_OBJECT(MAKE_CLASS((asInteger(kind) == 1) ?"ntpMatrix" :"ltpMatrix"))),uplo = GET_SLOT(from, Matrix_uploSym),diag = GET_SLOT(from, Matrix_diagSym),dimP = GET_SLOT(from, Matrix_DimSym);int n = *INTEGER(dimP);SET_SLOT(val, Matrix_DimSym, duplicate(dimP));SET_SLOT(val, Matrix_diagSym, duplicate(diag));SET_SLOT(val, Matrix_uploSym, duplicate(uplo));full_to_packed_int(LOGICAL(ALLOC_SLOT(val, Matrix_xSym, LGLSXP, (n*(n+1))/2)),LOGICAL(GET_SLOT(from, Matrix_xSym)), n,*CHAR(STRING_ELT(uplo, 0)) == 'U' ? UPP : LOW,*CHAR(STRING_ELT(diag, 0)) == 'U' ? UNT : NUN);UNPROTECT(1);return val;}/* this is very close to dtrMatrix_as_dge*() :*/SEXP ltrMatrix_as_lgeMatrix(SEXP from, SEXP kind){SEXP val = PROTECT(NEW_OBJECT(MAKE_CLASS((asInteger(kind) == 1) ?"ngeMatrix" :"lgeMatrix")));slot_dup(val, from, Matrix_xSym);slot_dup(val, from, Matrix_DimSym);slot_dup(val, from, Matrix_DimNamesSym);SET_SLOT(val, Matrix_factorSym, allocVector(VECSXP, 0));make_i_matrix_triangular(LOGICAL(GET_SLOT(val, Matrix_xSym)), from);UNPROTECT(1);return val;}/* this is very close to dsyMatrix_as_dge*() :*/SEXP lsyMatrix_as_lgeMatrix(SEXP from, SEXP kind){SEXP val = PROTECT(NEW_OBJECT(MAKE_CLASS((asInteger(kind) == 1) ?"ngeMatrix" :"lgeMatrix")));slot_dup(val, from, Matrix_xSym);slot_dup(val, from, Matrix_DimSym);slot_dup(val, from, Matrix_DimNamesSym);SET_SLOT(val, Matrix_factorSym, allocVector(VECSXP, 0));make_i_matrix_symmetric(LOGICAL(GET_SLOT(val, Matrix_xSym)), from);UNPROTECT(1);return val;}