Actual source code: dmlabelimpl.h

  1: #ifndef _LABELIMPL_H
  2: #define _LABELIMPL_H

  4: #include <petscdmlabel.h>
  5: #include <petscbt.h>
  6: #include <petscistypes.h>
  7: #include <petsc/private/hashmapi.h>
  8: #include <petsc/private/hashseti.h>

 10: /* This is an integer map, in addition it is also a container class
 11:    Design points:
 12:      - Low storage is the most important design point
 13:      - We want flexible insertion and deletion
 14:      - We can live with O(log) query, but we need O(1) iteration over strata
 15: */
 16: struct _p_DMLabel {
 17:   PETSCHEADER(int);
 18:   PetscInt  numStrata;     /* Number of integer values */
 19:   PetscInt  defaultValue;  /* Background value when no value explicitly given */
 20:   PetscInt *stratumValues; /* Value of each stratum */
 21:   /* Basic IS storage */
 22:   PetscBool *validIS;      /* The IS is valid (no additions need to be merged in) */
 23:   PetscInt  *stratumSizes; /* Size of each stratum */
 24:   IS        *points;       /* Points for each stratum, always sorted */
 25:   /* Hash tables for fast search and insertion */
 26:   PetscHMapI  hmap; /* Hash map for fast strata search */
 27:   PetscHSetI *ht;   /* Hash set for fast insertion */
 28:   /* Index for fast search */
 29:   PetscInt pStart, pEnd; /* Bounds for index lookup */
 30:   PetscBT  bt;           /* A bit-wise index */
 31:   /* Propagation */
 32:   PetscInt *propArray; /* Array of values for propagation */
 33: };

 35: PETSC_INTERN PetscErrorCode PetscSectionSymCreate_Label(PetscSectionSym);
 36: PETSC_INTERN PetscErrorCode DMLabelMakeAllInvalid_Internal(DMLabel);
 37: #endif