Actual source code: hashmapijv.h

  1: #ifndef _PETSC_HASHMAPIJV_H
  2: #define _PETSC_HASHMAPIJV_H

  4: #include <petsc/private/hashmap.h>
  5: #include <petsc/private/hashijkey.h>

  7: /* SUBMANSEC = Sys */
  8: /*
  9:    Hash map from (PetscInt,PetscInt) --> PetscScalar
 10: */
 11: PETSC_HASH_MAP(HMapIJV, PetscHashIJKey, PetscScalar, PetscHashIJKeyHash, PetscHashIJKeyEqual, -1)

 13: /*MC
 14:   PetscHMapIJVQueryAdd - Add value to the value of a given key if the key exists,
 15:   otherwise, insert a new (key,value) entry in the hash table

 17:   Synopsis:
 18: #include <petsc/private/hashmapijv.h>
 19:   PetscErrorCode PetscHMapIJVQueryAdd(PetscHMapT ht,PetscHashIJKey key,PetscScalar val,PetscBool *missing)

 21:   Input Parameters:
 22: + ht  - The hash table
 23: . key - The key
 24: - val - The value

 26:   Output Parameter:
 27: . missing - `PETSC_TRUE` if the `PetscHMapIJV` did not already have the given key

 29:   Level: developer

 31: .seealso: `PetscHMapIJVSetWithMode()`, `PetscHMapIJV`, `PetscHMapIJVGet()`, `PetscHMapIJVIterSet()`, `PetscHMapIJVSet()`
 32: M*/
 33: static inline PetscErrorCode PetscHMapIJVQueryAdd(PetscHMapIJV ht, PetscHashIJKey key, PetscScalar val, PetscBool *missing)
 34: {
 35:   int      ret;
 36:   khiter_t iter;
 37:   PetscFunctionBeginHot;
 39:   iter = kh_put(HMapIJV, ht, key, &ret);
 40:   PetscHashAssert(ret >= 0);
 41:   if (ret) kh_val(ht, iter) = val;
 42:   else kh_val(ht, iter) += val;
 43:   *missing = ret ? PETSC_TRUE : PETSC_FALSE;
 44:   PetscFunctionReturn(PETSC_SUCCESS);
 45: }
 46: #endif /* _PETSC_HASHMAPIJV_H */