// Copyright 2019 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. // +build !go1.12 package impl import "reflect" type mapIter struct { v reflect.Value keys []reflect.Value } // mapRange provides a less-efficient equivalent to // the Go 1.12 reflect.Value.MapRange method. func mapRange(v reflect.Value) *mapIter { return &mapIter{v: v} } func (i *mapIter) Next() bool { if i.keys == nil { i.keys = i.v.MapKeys() } else { i.keys = i.keys[1:] } return len(i.keys) > 0 } func (i *mapIter) Key() reflect.Value { return i.keys[0] } func (i *mapIter) Value() reflect.Value { return i.v.MapIndex(i.keys[0]) }