Matrix r4655
Loading...
Searching...
No Matches
Macros | Functions
dense.c File Reference
#include "Mdefines.h"
#include "idz.h"
#include "dense.h"

Go to the source code of this file.

Macros

#define BAND_CASES(_DO_)
 
#define BAND2(_PREFIX_, _CTYPE_, _PTR_)    _PREFIX_ ## band2(_PTR_(x1), m, n, a, b, di)
 
#define BAND1(_PREFIX_, _CTYPE_, _PTR_)    _PREFIX_ ## band1(_PTR_(x1), n, a, b, ul1, di)
 
#define DCPY2(_PREFIX_, _CTYPE_, _PTR_)
 
#define DCPY1(_PREFIX_, _CTYPE_, _PTR_)
 
#define DG_LOOP(_CTYPE_, _PTR_, _ONE_)
 
#define DS_LOOP(_CTYPE_, _PTR_)
 
#define TRANS_LOOP(_CTYPE_, _PTR_)
 
#define DCPY(_PREFIX_, _CTYPE_, _PTR_)
 
#define SP_LOOP(_CTYPE_, _PTR_, _INCREMENT_, _SCALE1_, _ONE_)
 
#define SP_LOOP(_CTYPE_, _PTR_, _INCREMENT_, _ASSIGN_, _ZERO_)
 
#define IS_LOOP(_CTYPE_, _PTR_, _NOTREAL_, _NOTCONJ_)
 
#define IT_LOOP(_CTYPE_, _PTR_, _ISNZ_)
 
#define ID_LOOP(_CTYPE_, _PTR_, _ISNZ_)
 
#define CAST_PATTERN(_X_)   (_X_ != 0)
 
#define CAST_LOGICAL(_X_)   (_X_ != 0)
 
#define CAST_INTEGER(_X_)   _X_
 
#define CAST_REAL(_X_)   _X_
 
#define CAST_COMPLEX(_X_)   _X_
 
#define SUM_CASES
 
#define SUM_TYPEOF(c)   (c == 'z') ? CPLXSXP : ((mean || c == 'd' || c == 'i') ? REALSXP : INTSXP)
 
#define SUM_LOOP(_CTYPE0_, _PTR0_, _CTYPE1_, _PTR1_, _ZERO_, _ONE_, _NA_, _ISNA_, _CAST_, _INCREMENT_, _SCALE2_)
 
#define SUM_KERNEL(_FOR_, _NA_, _ISNA_, _CAST_, _INCREMENT_, _SCALE2_)
 
#define SUM_LOOP(_CTYPE0_, _PTR0_, _CTYPE1_, _PTR1_, _ZERO_, _ONE_, _NA_, _ISNA_, _CAST_, _INCREMENT_, _SCALE2_)
 
#define SUM_KERNEL(_FOR_, _NA_, _ISNA_, _CAST_, _INCREMENT_)
 
#define TRY_INCREMENT(_LABEL_)
 
#define LONGDOUBLE_AS_DOUBLE(v)    (v > DBL_MAX) ? R_PosInf : ((v < -DBL_MAX) ? R_NegInf : (double) v);
 
#define SUM_LOOP
 
#define SUM_KERNEL(_FOR_)
 
#define SUM_KERNEL(_FOR_)
 
#define SUM_KERNEL(_FOR_)
 
#define SUM_KERNEL(_FOR_)
 
#define SUM_KERNEL(_FOR_)
 
#define SUM_KERNEL(_FOR_)
 
#define PROD_LOOP
 
#define PROD_KERNEL(_FOR_)
 
#define PROD_KERNEL(_FOR_)
 
#define PROD_KERNEL(_FOR_)
 
#define PROD_KERNEL(_FOR_)
 

Functions

SEXP dense_band (SEXP from, const char *class, int a, int b)
 
SEXP R_dense_band (SEXP from, SEXP k1, SEXP k2)
 
SEXP dense_diag_get (SEXP obj, const char *class, int names)
 
SEXP R_dense_diag_get (SEXP obj, SEXP names)
 
SEXP dense_diag_set (SEXP from, const char *class, SEXP value, int new)
 
SEXP R_dense_diag_set (SEXP from, SEXP value)
 
SEXP dense_transpose (SEXP from, const char *class)
 
SEXP R_dense_transpose (SEXP from)
 
SEXP dense_force_symmetric (SEXP from, const char *class, char ul)
 
SEXP R_dense_force_symmetric (SEXP from, SEXP uplo)
 
SEXP dense_symmpart (SEXP from, const char *class)
 
SEXP R_dense_symmpart (SEXP from)
 
SEXP dense_skewpart (SEXP from, const char *class)
 
SEXP R_dense_skewpart (SEXP from)
 
int dense_is_symmetric (SEXP obj, const char *class, int checkDN)
 
SEXP R_dense_is_symmetric (SEXP obj, SEXP checkDN)
 
int dense_is_triangular (SEXP obj, const char *class, int upper)
 
SEXP R_dense_is_triangular (SEXP obj, SEXP upper)
 
int dense_is_diagonal (SEXP obj, const char *class)
 
SEXP R_dense_is_diagonal (SEXP obj)
 
static void dense_colsum (SEXP x, const char *class, int m, int n, char ul, char di, int narm, int mean, SEXP res)
 
static void dense_rowsum (SEXP x, const char *class, int m, int n, char ul, char di, int narm, int mean, SEXP res)
 
SEXP dense_marginsum (SEXP obj, const char *class, int margin, int narm, int mean)
 
SEXP R_dense_marginsum (SEXP obj, SEXP margin, SEXP narm, SEXP mean)
 
SEXP dense_sum (SEXP obj, const char *class, int narm)
 
SEXP R_dense_sum (SEXP obj, SEXP narm)
 
SEXP dense_prod (SEXP obj, const char *class, int narm)
 
SEXP R_dense_prod (SEXP obj, SEXP narm)
 

Macro Definition Documentation

◆ BAND1

#define BAND1 (   _PREFIX_,
  _CTYPE_,
  _PTR_ 
)     _PREFIX_ ## band1(_PTR_(x1), n, a, b, ul1, di)

◆ BAND2

#define BAND2 (   _PREFIX_,
  _CTYPE_,
  _PTR_ 
)     _PREFIX_ ## band2(_PTR_(x1), m, n, a, b, di)

◆ BAND_CASES

#define BAND_CASES (   _DO_)
Value:
do { \
switch (class[0]) { \
case 'n': \
case 'l': \
_DO_(i, int, LOGICAL); \
break; \
case 'i': \
_DO_(i, int, INTEGER); \
break; \
case 'd': \
_DO_(d, double, REAL); \
break; \
case 'z': \
_DO_(z, Rcomplex, COMPLEX); \
break; \
default: \
break; \
} \
} while (0)

◆ CAST_COMPLEX

#define CAST_COMPLEX (   _X_)    _X_

Definition at line 1377 of file dense.c.

◆ CAST_INTEGER

#define CAST_INTEGER (   _X_)    _X_

Definition at line 1375 of file dense.c.

◆ CAST_LOGICAL

#define CAST_LOGICAL (   _X_)    (_X_ != 0)

Definition at line 1374 of file dense.c.

◆ CAST_PATTERN

#define CAST_PATTERN (   _X_)    (_X_ != 0)

Definition at line 1373 of file dense.c.

◆ CAST_REAL

#define CAST_REAL (   _X_)    _X_

Definition at line 1376 of file dense.c.

◆ DCPY

#define DCPY (   _PREFIX_,
  _CTYPE_,
  _PTR_ 
)
Value:
do { \
_CTYPE_ *px0 = _PTR_(x0), *px1 = _PTR_(x1); \
Matrix_memset(px1, 0, len, sizeof(_CTYPE_)); \
if (class[2] != 'p') \
_PREFIX_ ## dcpy2(px1, px0, n, len, '\0', di); \
else \
_PREFIX_ ## dcpy1(px1, px0, n, len, ul1, ul0, di); \
} while (0)

◆ DCPY1

#define DCPY1 (   _PREFIX_,
  _CTYPE_,
  _PTR_ 
)
Value:
do { \
_CTYPE_ *px0 = _PTR_(x0), *px1 = _PTR_(x1); \
Matrix_memset(px1, 0, XLENGTH(x1), sizeof(_CTYPE_)); \
if (a <= 0 && b >= 0) \
_PREFIX_ ## dcpy1(px1, px0, n, XLENGTH(x1), ul1, ul0, di); \
} while (0)

◆ DCPY2

#define DCPY2 (   _PREFIX_,
  _CTYPE_,
  _PTR_ 
)
Value:
do { \
_CTYPE_ *px0 = _PTR_(x0), *px1 = _PTR_(x1); \
Matrix_memset(px1, 0, XLENGTH(x1), sizeof(_CTYPE_)); \
if (a <= 0 && b >= 0) \
_PREFIX_ ## dcpy2(px1, px0, n, XLENGTH(x1), 'U', di); \
} while (0)

◆ DG_LOOP

#define DG_LOOP (   _CTYPE_,
  _PTR_,
  _ONE_ 
)
Value:
do { \
_CTYPE_ *pres = _PTR_(res), *px = _PTR_(x); \
if (di == 'U') \
for (j = 0; j < r; ++j) \
*(pres++) = _ONE_; \
else if (class[2] != 'p') { \
R_xlen_t m1a = (R_xlen_t) m + 1; \
for (j = 0; j < r; ++j, px += m1a) \
*(pres++) = *px; \
} \
else if (ul == 'U') \
for (j = 0; j < n; px += (++j) + 1) \
*(pres++) = *px; \
else \
for (j = 0; j < n; px += n - (j++)) \
*(pres++) = *px; \
} while (0)

◆ DS_LOOP

#define DS_LOOP (   _CTYPE_,
  _PTR_ 
)
Value:
do { \
_CTYPE_ *px = _PTR_(x), *pvalue = _PTR_(value); \
if (class[2] != 'p') { \
R_xlen_t m1a = (R_xlen_t) m + 1; \
if (v) \
for (j = 0; j < r; ++j, px += m1a) \
*px = *(pvalue++); \
else \
for (j = 0; j < r; ++j, px += m1a) \
*px = *pvalue; \
} else if (ul == 'U') { \
if (v) \
for (j = 0; j < n; px += (++j) + 1) \
*px = *(pvalue++); \
else \
for (j = 0; j < n; px += (++j) + 1) \
*px = *pvalue; \
} else { \
if (v) \
for (j = 0; j < n; px += n - (j++)) \
*px = *(pvalue++); \
else \
for (j = 0; j < n; px += n - (j++)) \
*px = *pvalue; \
} \
} while (0)

◆ ID_LOOP

#define ID_LOOP (   _CTYPE_,
  _PTR_,
  _ISNZ_ 
)

◆ IS_LOOP

#define IS_LOOP (   _CTYPE_,
  _PTR_,
  _NOTREAL_,
  _NOTCONJ_ 
)
Value:
do { \
_CTYPE_ *px = _PTR_(x), *py = px; \
for (j = 0; j < n; px = (py += (++j) + 1)) { \
if (_NOTREAL_((*px))) \
return 0; \
for (i = j + 1; i < n; ++i) { \
px += n; \
py += 1; \
if (_NOTCONJ_((*px), (*py))) \
return 0; \
} \
} \
return 1; \
} while (0)

◆ IT_LOOP

#define IT_LOOP (   _CTYPE_,
  _PTR_,
  _ISNZ_ 
)

◆ LONGDOUBLE_AS_DOUBLE

#define LONGDOUBLE_AS_DOUBLE (   v)     (v > DBL_MAX) ? R_PosInf : ((v < -DBL_MAX) ? R_NegInf : (double) v);

Definition at line 1705 of file dense.c.

◆ PROD_KERNEL [1/4]

#define PROD_KERNEL (   _FOR_)
Value:
do { \
_FOR_ { \
if (*px == 0) { \
REAL(res)[0] = 0.0; \
UNPROTECT(1); /* res */ \
return res; \
} \
++px; \
} \
} while (0)

◆ PROD_KERNEL [2/4]

#define PROD_KERNEL (   _FOR_)
Value:
do { \
_FOR_ { \
if (!(narm && (ISNAN((*px).r) || ISNAN((*px).i)))) { \
zr0 = zr; zi0 = zi; \
zr = zr0 * (*px).r - zi0 * (*px).i; \
zi = zr0 * (*px).i + zi0 * (*px).r; \
if (symmetric && i != j) { \
zr0 = zr; zi0 = zi; \
zr = zr0 * (*px).r - zi0 * (*px).i; \
zi = zr0 * (*px).i + zi0 * (*px).r; \
} \
} \
++px; \
} \
} while (0)

◆ PROD_KERNEL [3/4]

#define PROD_KERNEL (   _FOR_)
Value:
do { \
_FOR_ { \
if (!(narm && ISNAN(*px))) \
zr *= (symmetric && i != j) \
? (long double) *px * *px : *px; \
++px; \
} \
} while (0)

◆ PROD_KERNEL [4/4]

#define PROD_KERNEL (   _FOR_)
Value:
do { \
_FOR_ { \
if (*px != NA_INTEGER) \
zr *= (symmetric && i != j) \
? (long double) *px * *px : *px; \
else if (!narm) \
zr *= NA_REAL; \
++px; \
} \
} while (0)

◆ PROD_LOOP

#define PROD_LOOP

◆ SP_LOOP [1/2]

#define SP_LOOP (   _CTYPE_,
  _PTR_,
  _INCREMENT_,
  _ASSIGN_,
  _ZERO_ 
)

◆ SP_LOOP [2/2]

#define SP_LOOP (   _CTYPE_,
  _PTR_,
  _INCREMENT_,
  _SCALE1_,
  _ONE_ 
)

◆ SUM_CASES

#define SUM_CASES

Definition at line 1379 of file dense.c.

◆ SUM_KERNEL [1/8]

#define SUM_KERNEL (   _FOR_)
Value:
do { \
_FOR_ { \
if (*px != 0) \
s += (symmetric && i != j) ? 2 : 1; \
++px; \
} \
} while (0)

◆ SUM_KERNEL [2/8]

#define SUM_KERNEL (   _FOR_)
Value:
do { \
_FOR_ { \
if (*px == NA_INTEGER) { \
res = allocVector(INTSXP, 1); \
INTEGER(res)[0] = NA_INTEGER; \
return res; \
} \
++px; \
} \
} while (0)

◆ SUM_KERNEL [3/8]

#define SUM_KERNEL (   _FOR_)
Value:
do { \
_FOR_ { \
if (!(narm && (ISNAN((*px).r) || ISNAN((*px).i)))) { \
zr += (symmetric && i != j) \
? 2.0L * (*px).r : (*px).r; \
zi += (symmetric && i != j) \
? 2.0L * (*px).i : (*px).i; \
} \
++px; \
} \
} while (0)

◆ SUM_KERNEL [4/8]

#define SUM_KERNEL (   _FOR_)
Value:
do { \
_FOR_ { \
if (!(narm && ISNAN(*px))) \
zr += (symmetric && i != j) \
? 2.0L * *px : *px; \
++px; \
} \
} while (0)

◆ SUM_KERNEL [5/8]

#define SUM_KERNEL (   _FOR_)
Value:
do { \
_FOR_ { \
if (!(narm && *px == NA_INTEGER)) { \
int d = (symmetric && i != j) ? 2 : 1; \
if (count > UINT_MAX - d) \
TRY_INCREMENT(ifover); \
t += (d == 2) ? 2LL * *px : *px; \
count += d; \
} \
++px; \
} \
} while (0)

◆ SUM_KERNEL [6/8]

#define SUM_KERNEL (   _FOR_)
Value:
do { \
_FOR_ { \
if (!(narm && *px == NA_INTEGER)) \
zr += (symmetric && i != j) \
? 2.0L * *px : *px; \
++px; \
} \
} while (0)

◆ SUM_KERNEL [7/8]

#define SUM_KERNEL (   _FOR_,
  _NA_,
  _ISNA_,
  _CAST_,
  _INCREMENT_ 
)
Value:
do { \
_FOR_ { \
int again = symmetric && i != j; \
if (_ISNA_(*px0)) { \
if (!narm) { \
px1[i] = _NA_; \
if (again) \
px1[j] = _NA_; \
} else if (narm_) { \
--count[i]; \
if (again) \
--count[j]; \
} \
} else { \
tmp = _CAST_(*px0); \
_INCREMENT_(px1[i], tmp); \
if (again) \
_INCREMENT_(px1[j], tmp); \
} \
++px0; \
} \
} while (0)

◆ SUM_KERNEL [8/8]

#define SUM_KERNEL (   _FOR_,
  _NA_,
  _ISNA_,
  _CAST_,
  _INCREMENT_,
  _SCALE2_ 
)
Value:
do { \
if (mean) \
count = m; \
_FOR_ { \
if (_ISNA_(*px0)) { \
if (!narm) \
*px1 = _NA_; \
else if (narm_) \
--count; \
} else { \
tmp = _CAST_(*px0); \
_INCREMENT_((*px1), tmp); \
} \
++px0; \
} \
if (mean) \
_SCALE2_((*px1), count); \
} while (0)

◆ SUM_LOOP [1/3]

#define SUM_LOOP (   _CTYPE0_,
  _PTR0_,
  _CTYPE1_,
  _PTR1_,
  _ZERO_,
  _ONE_,
  _NA_,
  _ISNA_,
  _CAST_,
  _INCREMENT_,
  _SCALE2_ 
)

◆ SUM_LOOP [2/3]

#define SUM_LOOP (   _CTYPE0_,
  _PTR0_,
  _CTYPE1_,
  _PTR1_,
  _ZERO_,
  _ONE_,
  _NA_,
  _ISNA_,
  _CAST_,
  _INCREMENT_,
  _SCALE2_ 
)

◆ SUM_LOOP [3/3]

#define SUM_LOOP

◆ SUM_TYPEOF

#define SUM_TYPEOF (   c)    (c == 'z') ? CPLXSXP : ((mean || c == 'd' || c == 'i') ? REALSXP : INTSXP)

Definition at line 1422 of file dense.c.

◆ TRANS_LOOP

#define TRANS_LOOP (   _CTYPE_,
  _PTR_ 
)
Value:
do { \
_CTYPE_ *px0 = _PTR_(x0), *px1 = _PTR_(x1); \
if (class[2] != 'p') { \
R_xlen_t mn1s = XLENGTH(x0) - 1; \
for (j = 0; j < m; ++j, px0 -= mn1s) \
for (i = 0; i < n; ++i, px0 += m) \
*(px1++) = *px0; \
} else if (ul == 'U') { \
for (j = 0; j < n; ++j) \
for (i = j; i < n; ++i) \
*(px1++) = *(px0 + PACKED_AR21_UP(j, i)); \
} else { \
R_xlen_t n2 = (R_xlen_t) n * 2; \
for (j = 0; j < n; ++j) \
for (i = 0; i <= j; ++i) \
*(px1++) = *(px0 + PACKED_AR21_LO(j, i, n2)); \
} \
} while (0)
#define PACKED_AR21_UP(i, j)
Definition Mdefines.h:194
#define PACKED_AR21_LO(i, j, m2)
Definition Mdefines.h:196

◆ TRY_INCREMENT

#define TRY_INCREMENT (   _LABEL_)
Value:
do { \
if ((s >= 0) \
? ( t <= MATRIX_INT_FAST64_MAX - s) \
: (-t <= s - MATRIX_INT_FAST64_MIN)) { \
s += t; \
t = 0; \
count = 0; \
} else { \
over = 1; \
goto _LABEL_; \
} \
} while (0)
#define MATRIX_INT_FAST64_MAX
Definition Mdefines.h:29
#define MATRIX_INT_FAST64_MIN
Definition Mdefines.h:28

Definition at line 1691 of file dense.c.

Function Documentation

◆ dense_band()

SEXP dense_band ( SEXP  from,
const char *  class,
int  a,
int  b 
)

◆ dense_colsum()

static void dense_colsum ( SEXP  x,
const char *  class,
int  m,
int  n,
char  ul,
char  di,
int  narm,
int  mean,
SEXP  res 
)
static

Definition at line 1425 of file dense.c.

References SUM_CASES.

Referenced by dense_marginsum().

◆ dense_diag_get()

SEXP dense_diag_get ( SEXP  obj,
const char *  class,
int  names 
)

◆ dense_diag_set()

SEXP dense_diag_set ( SEXP  from,
const char *  class,
SEXP  value,
int  new 
)

◆ dense_force_symmetric()

SEXP dense_force_symmetric ( SEXP  from,
const char *  class,
char  ul 
)

◆ dense_is_diagonal()

int dense_is_diagonal ( SEXP  obj,
const char *  class 
)

◆ dense_is_symmetric()

int dense_is_symmetric ( SEXP  obj,
const char *  class,
int  checkDN 
)

◆ dense_is_triangular()

int dense_is_triangular ( SEXP  obj,
const char *  class,
int  upper 
)

◆ dense_marginsum()

SEXP dense_marginsum ( SEXP  obj,
const char *  class,
int  margin,
int  narm,
int  mean 
)

◆ dense_prod()

SEXP dense_prod ( SEXP  obj,
const char *  class,
int  narm 
)

Definition at line 1934 of file dense.c.

References GET_SLOT, LONGDOUBLE_AS_DOUBLE, Matrix_diagSym, Matrix_DimSym, Matrix_uploSym, Matrix_xSym, and PROD_LOOP.

Referenced by R_dense_prod().

◆ dense_rowsum()

static void dense_rowsum ( SEXP  x,
const char *  class,
int  m,
int  n,
char  ul,
char  di,
int  narm,
int  mean,
SEXP  res 
)
static

Definition at line 1519 of file dense.c.

References Matrix_Calloc, Matrix_Free, and SUM_CASES.

Referenced by dense_marginsum().

◆ dense_skewpart()

SEXP dense_skewpart ( SEXP  from,
const char *  class 
)

◆ dense_sum()

SEXP dense_sum ( SEXP  obj,
const char *  class,
int  narm 
)

◆ dense_symmpart()

SEXP dense_symmpart ( SEXP  from,
const char *  class 
)

◆ dense_transpose()

SEXP dense_transpose ( SEXP  from,
const char *  class 
)

◆ R_dense_band()

SEXP R_dense_band ( SEXP  from,
SEXP  k1,
SEXP  k2 
)

◆ R_dense_diag_get()

SEXP R_dense_diag_get ( SEXP  obj,
SEXP  names 
)

Definition at line 312 of file dense.c.

References _, dense_diag_get(), ERROR_INVALID_CLASS, valid, and VALID_DENSE.

◆ R_dense_diag_set()

SEXP R_dense_diag_set ( SEXP  from,
SEXP  value 
)

◆ R_dense_force_symmetric()

SEXP R_dense_force_symmetric ( SEXP  from,
SEXP  uplo 
)

Definition at line 684 of file dense.c.

References _, dense_force_symmetric(), ERROR_INVALID_CLASS, valid, and VALID_DENSE.

◆ R_dense_is_diagonal()

SEXP R_dense_is_diagonal ( SEXP  obj)

Definition at line 1355 of file dense.c.

References dense_is_diagonal(), ERROR_INVALID_CLASS, matrix_as_dense(), valid, and VALID_DENSE.

◆ R_dense_is_symmetric()

SEXP R_dense_is_symmetric ( SEXP  obj,
SEXP  checkDN 
)

Definition at line 1086 of file dense.c.

References _, dense_is_symmetric(), ERROR_INVALID_CLASS, matrix_as_dense(), valid, and VALID_DENSE.

◆ R_dense_is_triangular()

SEXP R_dense_is_triangular ( SEXP  obj,
SEXP  upper 
)

Definition at line 1218 of file dense.c.

References _, dense_is_triangular(), ERROR_INVALID_CLASS, matrix_as_dense(), valid, and VALID_DENSE.

◆ R_dense_marginsum()

SEXP R_dense_marginsum ( SEXP  obj,
SEXP  margin,
SEXP  narm,
SEXP  mean 
)

Definition at line 1662 of file dense.c.

References _, dense_marginsum(), ERROR_INVALID_CLASS, valid, and VALID_DENSE.

◆ R_dense_prod()

SEXP R_dense_prod ( SEXP  obj,
SEXP  narm 
)

Definition at line 2114 of file dense.c.

References _, dense_prod(), ERROR_INVALID_CLASS, valid, and VALID_DENSE.

◆ R_dense_skewpart()

SEXP R_dense_skewpart ( SEXP  from)

Definition at line 1011 of file dense.c.

References dense_skewpart(), ERROR_INVALID_CLASS, valid, and VALID_DENSE.

◆ R_dense_sum()

SEXP R_dense_sum ( SEXP  obj,
SEXP  narm 
)

Definition at line 1919 of file dense.c.

References _, dense_sum(), ERROR_INVALID_CLASS, valid, and VALID_DENSE.

◆ R_dense_symmpart()

SEXP R_dense_symmpart ( SEXP  from)

Definition at line 844 of file dense.c.

References dense_symmpart(), ERROR_INVALID_CLASS, valid, and VALID_DENSE.

◆ R_dense_transpose()

SEXP R_dense_transpose ( SEXP  from)

Definition at line 568 of file dense.c.

References dense_transpose(), ERROR_INVALID_CLASS, valid, and VALID_DENSE.