PETSc では、以下の 4 つのスニペットのように、Vec、Mat、IS などの多くの一般的な構造が同様に定義されています。質問:
- PETSCHEADER はいつ、どのように拡張されますか? 私は別の言語から外国語インターフェースを書いていますが、関数でマクロをラップする必要があるかどうか疑問に思っていました。
hdr
とのスコープは何ops
ですか?
前もって感謝します
petscvec.h
typedef struct _p_Vec* Vec;
vecimpl.h
struct _p_Vec {
PETSCHEADER(struct _VecOps);
PetscLayout map;
void *data; /* implementation-specific data */
...
petscimpl.h
#define PETSCHEADER(ObjectOps) \
_p_PetscObject hdr; \
ObjectOps *ops
vecimpl.h
typedef struct _VecOps *VecOps;
struct _VecOps {
PetscErrorCode (*duplicate)(Vec,Vec*); /* get single vector */
PetscErrorCode (*duplicatevecs)(Vec,PetscInt,Vec**); /* get array of vectors */
...