在Rinternals.h中,VECTOR_SEXPREC
struct
定义为:
typedef struct VECTOR_SEXPREC {
SEXPREC_HEADER;
struct vecsxp_struct vecsxp;
} VECTOR_SEXPREC, *VECSEXP;
where
struct vecsxp_struct {
R_len_t length;
R_len_t truelength;
};
#define SEXPREC_HEADER \
struct sxpinfo_struct sxpinfo; \
struct SEXPREC *attrib; \
struct SEXPREC *gengc_next_node, *gengc_prev_node
typedef union { VECTOR_SEXPREC s; double align; } SEXPREC_ALIGN;
据说SEXPREC_HEADER中的两个最后一个指针“用于维护colector的链表结构”。与SEXPREC结构不同,其中节点数据似乎表示为结构的u联合成员,在这个结构中,我看不出它的哪个成员代表'节点数据'。
DATAPTR(x)
(数据访问宏)定义为:
#define DATAPTR(x) (((SEXPREC_ALIGN *) (x)) + 1)
似乎数据对应于x后面的指针,但我不明白这是如何工作的。有没有明确解释过的文件? (我已经在R内部进行了搜索,但我没有找到很多)
感谢。