Text file src/pkg/runtime/hashmap.h
1 // Copyright 2009 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 struct Hmap; /* opaque */
6
7 /* Used by the garbage collector */
8 struct hash_gciter
9 {
10 Hmap *h;
11 int32 phase;
12 uintptr bucket;
13 struct Bucket *b;
14 uintptr i;
15 };
16
17 // this data is used by the garbage collector to keep the map's
18 // internal structures from being reclaimed. The iterator must
19 // return in st every live object (ones returned by mallocgc) so
20 // that those objects won't be collected, and it must return
21 // every key & value in key_data/val_data so they can get scanned
22 // for pointers they point to. Note that if you malloc storage
23 // for keys and values, you need to do both.
24 struct hash_gciter_data
25 {
26 uint8 *st; /* internal structure, or nil */
27 uint8 *key_data; /* key data, or nil */
28 uint8 *val_data; /* value data, or nil */
29 bool indirectkey; /* storing pointers to keys */
30 bool indirectval; /* storing pointers to values */
31 };
32 bool hash_gciter_init (struct Hmap *h, struct hash_gciter *it);
33 bool hash_gciter_next (struct hash_gciter *it, struct hash_gciter_data *data);
View as plain text