| // Copyright 2009 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| struct Hmap; /* opaque */ |
| |
| /* Used by the garbage collector */ |
| struct hash_gciter |
| { |
| Hmap *h; |
| int32 phase; |
| uintptr bucket; |
| struct Bucket *b; |
| uintptr i; |
| }; |
| |
| // this data is used by the garbage collector to keep the map's |
| // internal structures from being reclaimed. The iterator must |
| // return in st every live object (ones returned by mallocgc) so |
| // that those objects won't be collected, and it must return |
| // every key & value in key_data/val_data so they can get scanned |
| // for pointers they point to. Note that if you malloc storage |
| // for keys and values, you need to do both. |
| struct hash_gciter_data |
| { |
| uint8 *st; /* internal structure, or nil */ |
| uint8 *key_data; /* key data, or nil */ |
| uint8 *val_data; /* value data, or nil */ |
| bool indirectkey; /* storing pointers to keys */ |
| bool indirectval; /* storing pointers to values */ |
| }; |
| bool hash_gciter_init (struct Hmap *h, struct hash_gciter *it); |
| bool hash_gciter_next (struct hash_gciter *it, struct hash_gciter_data *data); |