Actual source code: hashmapiv.h

  1: #pragma once

  3: #include <petsc/private/hashmap.h>

  5: /* SUBMANSEC = Sys */
  6: /*
  7:    Hash map from PetscInt --> PetscScalar
  8: */
  9: PETSC_HASH_MAP(HMapIV, PetscInt, PetscScalar, PetscHashInt, PetscHashEqual, -1)

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

 15:   Synopsis:
 16: #include <petsc/private/hashmapiv.h>
 17:   PetscErrorCode PetscHMapIVAddValue(PetscHMapT ht,PetscInt key,PetscScalar val)

 19:   Input Parameters:
 20: + ht  - The hash table
 21: . key - The key
 22: - val - The value

 24:   Level: developer

 26: .seealso: `PetscHMapIVGet()`, `PetscHMapIVIterSet()`, `PetscHMapIVSet()`
 27: M*/
 28: static inline PetscErrorCode PetscHMapIVAddValue(PetscHMapIV ht, PetscInt key, PetscScalar val)
 29: {
 30:   int      ret;
 31:   khiter_t iter;

 33:   PetscFunctionBeginHot;
 34:   PetscAssertPointer(ht, 1);
 35:   iter = kh_put(HMapIV, ht, key, &ret);
 36:   PetscHashAssert(ret >= 0);
 37:   if (ret) kh_val(ht, iter) = val;
 38:   else kh_val(ht, iter) += val;
 39:   PetscFunctionReturn(PETSC_SUCCESS);
 40: }