xref: /petsc/include/petsc/private/dmlabelimpl.h (revision 06df1fb1d90e9fc636bd70165689a9807601ddca)
1 #if !defined(_LABELIMPL_H)
2 #define _LABELIMPL_H
3 
4 #include <petscdmlabel.h>
5 #include <petscbt.h>
6 #include <petscistypes.h>
7 #include <petsc/private/hash.h>
8 
9 /* This is an integer map, in addition it is also a container class
10    Design points:
11      - Low storage is the most important design point
12      - We want flexible insertion and deletion
13      - We can live with O(log) query, but we need O(1) iteration over strata
14 */
15 struct _n_DMLabel {
16   PetscInt         refct;
17   PetscObjectState state;
18   char       *name;           /* Label name */
19   PetscInt    numStrata;      /* Number of integer values */
20   PetscInt    defaultValue;   /* Background value when no value explicitly given */
21   PetscInt   *stratumValues;  /* Value of each stratum */
22   /* Basic IS storage */
23   PetscBool  *validIS;        /* The IS is valid (no additions need to be merged in) */
24   PetscInt   *stratumSizes;   /* Size of each stratum */
25   IS         *points;         /* Points for each stratum, always sorted */
26   /* Hashtable for fast insertion */
27   PetscHashI *ht;             /* Hash table for fast insertion */
28   /* Index for fast search */
29   PetscInt    pStart, pEnd;   /* Bounds for index lookup */
30   PetscBT     bt;             /* A bit-wise index */
31 };
32 
33 PETSC_INTERN PetscErrorCode PetscSectionSymCreate_Label(PetscSectionSym);
34 #endif
35