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

Go to the source code of this file.

Macros

#define V2SPV(_KIND_, _NZ_, _CTYPE1_, _SEXPTYPE1_, _PTR1_, _CTYPE2_, _SEXPTYPE2_, _PTR2_)
 
#define V2SPV_CASES(_CTYPE2_, _SEXPTYPE2_, _PTR2_)
 
#define R2SPV(_CTYPE_, _PTR_, _MASK_)
 

Functions

SEXP v2spV (SEXP from)
 
SEXP CR2spV (SEXP from)
 

Macro Definition Documentation

◆ R2SPV

#define R2SPV (   _CTYPE_,
  _PTR_,
  _MASK_ 
)
Value:
do { \
_MASK_(_CTYPE_ *px = _PTR_(x )); \
_MASK_(_CTYPE_ *pvx = _PTR_(vx)); \
if (TYPEOF(vi) == INTSXP) { \
int *pvi = INTEGER(vi), i; \
k = 0; \
for (i = 1; i <= m; i += 1) { \
kend = *(++pp); \
while (k < kend) { \
pvi[work[pj[k]]] = m * pj[k] + i; \
_MASK_(pvx[work[pj[k]]] = px[k]); \
work[pj[k++]]++; \
} \
} \
} else { \
double *pvi = REAL(vi), i_, m_ = (double) m; \
k = 0; \
for (i_ = 1.0; i_ <= m_; i_ += 1.0) { \
kend = *(++pp); \
while (k < kend) { \
pvi[work[pj[k]]] = m_ * pj[k] + i_; \
_MASK_(pvx[work[pj[k]]] = px[k]); \
work[pj[k++]]++; \
} \
} \
} \
} while (0)

◆ V2SPV

#define V2SPV (   _KIND_,
  _NZ_,
  _CTYPE1_,
  _SEXPTYPE1_,
  _PTR1_,
  _CTYPE2_,
  _SEXPTYPE2_,
  _PTR2_ 
)
Value:
do { \
PROTECT(to = newObject(#_KIND_ "sparseVector")); \
_CTYPE1_ *py = _PTR1_(from); \
for (k = 0; k < n; ++k) \
if (_NZ_(py[k])) \
++nnz; \
PROTECT(i = allocVector(_SEXPTYPE2_, nnz)); \
PROTECT(x = allocVector(_SEXPTYPE1_, nnz)); \
_CTYPE2_ *pi = _PTR2_(i); \
_CTYPE1_ *px = _PTR1_(x); \
for (k = 0; k < n; ++k) { \
if (_NZ_(py[k])) { \
*(pi++) = (_CTYPE2_) (k + 1); \
*(px++) = py[k]; \
} \
} \
} while (0)
SEXP newObject(const char *)
Definition objects.c:4

◆ V2SPV_CASES

#define V2SPV_CASES (   _CTYPE2_,
  _SEXPTYPE2_,
  _PTR2_ 
)
Value:
do { \
switch (TYPEOF(from)) { \
case LGLSXP: \
V2SPV(l, ISNZ_LOGICAL, int, LGLSXP, LOGICAL, \
_CTYPE2_, _SEXPTYPE2_, _PTR2_); \
break; \
case INTSXP: \
V2SPV(i, ISNZ_INTEGER, int, INTSXP, INTEGER, \
_CTYPE2_, _SEXPTYPE2_, _PTR2_); \
break; \
case REALSXP: \
V2SPV(d, ISNZ_REAL, double, REALSXP, REAL, \
_CTYPE2_, _SEXPTYPE2_, _PTR2_); \
break; \
case CPLXSXP: \
V2SPV(z, ISNZ_COMPLEX, Rcomplex, CPLXSXP, COMPLEX, \
_CTYPE2_, _SEXPTYPE2_, _PTR2_); \
break; \
default: \
ERROR_INVALID_TYPE(from, __func__); \
break; \
} \
} while (0)
#define ISNZ_REAL(_X_)
Definition Mdefines.h:111
#define ISNZ_LOGICAL(_X_)
Definition Mdefines.h:109
#define ISNZ_INTEGER(_X_)
Definition Mdefines.h:110
#define ISNZ_COMPLEX(_X_)
Definition Mdefines.h:112

Function Documentation

◆ CR2spV()

SEXP CR2spV ( SEXP  from)

◆ v2spV()

SEXP v2spV ( SEXP  from)

Definition at line 4 of file vector.c.

References Matrix_iSym, Matrix_lengthSym, Matrix_xSym, SET_SLOT, and V2SPV_CASES.