blob: 4b15493f2f436465bdd94de562e1bca8b7bc0344 [file] [log] [blame]
khenaidoo5fc5cea2021-08-11 17:39:16 -04001// Copyright 2019 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
Joey Armstrongba3d9d12024-01-15 14:22:11 -05005//go:build !go1.12
khenaidoo5fc5cea2021-08-11 17:39:16 -04006// +build !go1.12
7
8package impl
9
10import "reflect"
11
12type mapIter struct {
13 v reflect.Value
14 keys []reflect.Value
15}
16
17// mapRange provides a less-efficient equivalent to
18// the Go 1.12 reflect.Value.MapRange method.
19func mapRange(v reflect.Value) *mapIter {
20 return &mapIter{v: v}
21}
22
23func (i *mapIter) Next() bool {
24 if i.keys == nil {
25 i.keys = i.v.MapKeys()
26 } else {
27 i.keys = i.keys[1:]
28 }
29 return len(i.keys) > 0
30}
31
32func (i *mapIter) Key() reflect.Value {
33 return i.keys[0]
34}
35
36func (i *mapIter) Value() reflect.Value {
37 return i.v.MapIndex(i.keys[0])
38}