Actual source code: petsc_p4est_package.h

      1: #pragma once
      2: #include <petscsys.h>
      3: #if defined(PETSC_HAVE_MPIUNI)
      4:   #undef MPI_SUCCESS
      5: #endif
      6: #include <p4est_base.h>
      7: #if defined(PETSC_HAVE_MPIUNI)
      8:   #define MPI_SUCCESS 0
      9: #endif

     11: #if defined(PETSC_HAVE_SETJMP_H) && defined(PETSC_USE_DEBUG)
     12:   #include <setjmp.h>
     13: PETSC_INTERN jmp_buf PetscScJumpBuf;

     15:   #define PetscCallP4est(func, args) \
     16:     do { \
     17:       if (setjmp(PetscScJumpBuf)) { \
     18:         return PetscError(PETSC_COMM_SELF, __LINE__, PETSC_FUNCTION_NAME, __FILE__, PETSC_ERR_LIB, PETSC_ERROR_REPEAT, "Error in p4est/libsc call %s()", #func); \
     19:       } else { \
     20:         PetscStackPushExternal(#func); \
     21:         func args; \
     22:         PetscStackPop; \
     23:       } \
     24:     } while (0)
     25:   #define PetscCallP4estReturn(ret, func, args) \
     26:     do { \
     27:       if (setjmp(PetscScJumpBuf)) { \
     28:         return PetscError(PETSC_COMM_SELF, __LINE__, PETSC_FUNCTION_NAME, __FILE__, PETSC_ERR_LIB, PETSC_ERROR_REPEAT, "Error in p4est/libsc call %s()", #func); \
     29:       } else { \
     30:         PetscStackPushExternal(#func); \
     31:         ret = func args; \
     32:         PetscStackPop; \
     33:       } \
     34:     } while (0)
     35: #else
     36:   #define PetscCallP4est(func, args) \
     37:     do { \
     38:       PetscStackPushExternal(#func); \
     39:       func args; \
     40:       PetscStackPop; \
     41:     } while (0)
     42:   #define PetscCallP4estReturn(ret, func, args) \
     43:     do { \
     44:       PetscStackPushExternal(#func); \
     45:       ret = func args; \
     46:       PetscStackPop; \
     47:     } while (0)
     48: #endif

     50: #if defined(P4EST_ENABLE_DEBUG)
     51:   #define PETSC_P4EST_ASSERT(x) P4EST_ASSERT(x)
     52: #else
     53:   #define PETSC_P4EST_ASSERT(x) (void)(x)
     54: #endif

     56: PETSC_EXTERN PetscErrorCode PetscP4estInitialize(void);

     58: static inline PetscErrorCode P4estLocidxCast(PetscInt a, p4est_locidx_t *b)
     59: {
     60:   PetscFunctionBegin;
     61:   *b = (p4est_locidx_t)(a);
     62: #if defined(PETSC_USE_64BIT_INDICES)
     63:   PetscCheck((a) <= P4EST_LOCIDX_MAX, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Index to large for p4est_locidx_t");
     64: #endif
     65:   PetscFunctionReturn(PETSC_SUCCESS);
     66: }

     68: static inline PetscErrorCode P4estTopidxCast(PetscInt a, p4est_topidx_t *b)
     69: {
     70:   PetscFunctionBegin;
     71:   *b = (p4est_topidx_t)(a);
     72: #if defined(PETSC_USE_64BIT_INDICES)
     73:   PetscCheck((a) <= P4EST_TOPIDX_MAX, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Index to large for p4est_topidx_t");
     74: #endif
     75:   PetscFunctionReturn(PETSC_SUCCESS);
     76: }