0

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 */    
...
4

0 に答える 0