1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/*
* Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2012 Los Alamos National Security, Inc. All rights reserved.
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
* Copyright (c) 2015 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2021-2022 Nanook Consulting. All rights reserved.
* Copyright (c) 2023 Triad National Security, LLC. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/
#ifndef PMIX_HASH_H
#define PMIX_HASH_H
#include "src/include/pmix_config.h"
#include "src/class/pmix_hash_table.h"
#include "src/include/pmix_globals.h"
#include "src/mca/bfrops/bfrops_types.h"
BEGIN_C_DECLS
/* store a value in the given hash table for the specified
* rank index.*/
PMIX_EXPORT pmix_status_t pmix_hash_store(pmix_hash_table_t *table,
pmix_rank_t rank, pmix_kval_t *kin,
pmix_info_t *qualifiers, size_t nquals,
pmix_keyindex_t *kidx);
/* Fetch the value for a specified key and rank from within
* the given hash_table */
PMIX_EXPORT pmix_status_t pmix_hash_fetch(pmix_hash_table_t *table, pmix_rank_t rank,
const char *key,
pmix_info_t *qualifiers, size_t nquals,
pmix_list_t *kvals,
pmix_keyindex_t *kidx);
/* remove the specified key-value from the given hash_table.
* A NULL key will result in removal of all data for the
* given rank. A rank of PMIX_RANK_WILDCARD indicates that
* the specified key is to be removed from the data for all
* ranks in the table. Combining key=NULL with rank=PMIX_RANK_WILDCARD
* will therefore result in removal of all data from the
* table */
PMIX_EXPORT pmix_status_t pmix_hash_remove_data(pmix_hash_table_t *table,
pmix_rank_t rank,
const char *key,
pmix_keyindex_t *kidx);
PMIX_EXPORT void pmix_hash_register_key(uint32_t inid,
pmix_regattr_input_t *ptr,
pmix_keyindex_t *kidx);
PMIX_EXPORT pmix_regattr_input_t* pmix_hash_lookup_key(uint32_t inid,
const char *key,
pmix_keyindex_t *kidx);
#define PMIX_HASH_TRACE_KEY_ACTUAL(s, r, k, id, tbl, v) \
do { \
const char *_k; \
char *_v; \
pmix_regattr_input_t *_p; \
if (NULL == (k) && UINT32_MAX != id) { \
_p = pmix_hash_lookup_key((id), NULL, NULL); \
if (NULL == _p) { \
_k = "KEY NOT FOUND"; \
} else { \
_k = _p->string; \
} \
} else if (NULL != (k)) { \
_k = (k); \
} else { \
_k = NULL; \
} \
if (NULL != _k) { \
if (0 == strcmp((s), _k)) { \
if (NULL != (v)) { \
_v = PMIx_Value_string(v); \
} else { \
_v = strdup("\tValue is NULL"); \
} \
pmix_output(0, "[%s:%s:%d] %s: Rank %s Key %s\n%s\n\n", \
__FILE__, __func__, __LINE__, \
(tbl)->ht_label, PMIX_RANK_PRINT(r), \
PMIx_Get_attribute_name(_k), _v); \
free(_v); \
} \
} \
} while(0)
#define PMIX_HASH_TRACE_KEY(c, r, s, k, id, v, tbl) \
do { \
if (0 == strcasecmp(c, "SERVER") && \
PMIX_PEER_IS_SERVER(pmix_globals.mypeer)) { \
PMIX_HASH_TRACE_KEY_ACTUAL(s, r, k, id, tbl, v); \
} else if (0 == strcasecmp(c, "CLIENT") && \
!PMIX_PEER_IS_SERVER(pmix_globals.mypeer)) { \
PMIX_HASH_TRACE_KEY_ACTUAL(s, r, k, id, tbl, v); \
} \
} while (0)
END_C_DECLS
#endif /* PMIX_HASH_H */