The R Project SVN R-packages

Rev

Rev 4565 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

            /* Sparse triangular matrices in triplet format */
#include "dtTMatrix.h"
#include "dgTMatrix.h" /* xTMatrix_validate */

/* This should be use for *BOTH* triangular and symmetric Tsparse: */
SEXP tTMatrix_validate(SEXP x)
{
    SEXP val = xTMatrix_validate(x);/* checks x slot */
    if(isString(val))
    return(val);
    else {
    SEXP
        islot = GET_SLOT(x, Matrix_iSym),
        jslot = GET_SLOT(x, Matrix_jSym);
    int uploT = (*uplo_P(x) == 'U'),
        k, nnz = length(islot),
        *xj = INTEGER(jslot),
        *xi = INTEGER(islot);

    /* Maybe FIXME: ">" should be ">="  for diag = 'U' (uplo = 'U') */
    if(uploT) {
        for (k = 0; k < nnz; k++)
        if(xi[k] > xj[k])
            return mkString(_("uplo='U' must not have sparse entries in lower diagonal"));
    }
    else {
        for (k = 0; k < nnz; k++)
        if(xi[k] < xj[k])
            return mkString(_("uplo='L' must not have sparse entries in upper diagonal"));
    }

    return ScalarLogical(1);
    }
}

/* SEXP dtTMatrix_as_dtrMatrix(SEXP x) ---> now in ./TMatrix_as.c */