1*1c12ee1eSDan Willemsen// Copyright 2019 The Go Authors. All rights reserved. 2*1c12ee1eSDan Willemsen// Use of this source code is governed by a BSD-style 3*1c12ee1eSDan Willemsen// license that can be found in the LICENSE file. 4*1c12ee1eSDan Willemsen 5*1c12ee1eSDan Willemsen//go:build !go1.12 6*1c12ee1eSDan Willemsen// +build !go1.12 7*1c12ee1eSDan Willemsen 8*1c12ee1eSDan Willemsenpackage impl 9*1c12ee1eSDan Willemsen 10*1c12ee1eSDan Willemsenimport "reflect" 11*1c12ee1eSDan Willemsen 12*1c12ee1eSDan Willemsentype mapIter struct { 13*1c12ee1eSDan Willemsen v reflect.Value 14*1c12ee1eSDan Willemsen keys []reflect.Value 15*1c12ee1eSDan Willemsen} 16*1c12ee1eSDan Willemsen 17*1c12ee1eSDan Willemsen// mapRange provides a less-efficient equivalent to 18*1c12ee1eSDan Willemsen// the Go 1.12 reflect.Value.MapRange method. 19*1c12ee1eSDan Willemsenfunc mapRange(v reflect.Value) *mapIter { 20*1c12ee1eSDan Willemsen return &mapIter{v: v} 21*1c12ee1eSDan Willemsen} 22*1c12ee1eSDan Willemsen 23*1c12ee1eSDan Willemsenfunc (i *mapIter) Next() bool { 24*1c12ee1eSDan Willemsen if i.keys == nil { 25*1c12ee1eSDan Willemsen i.keys = i.v.MapKeys() 26*1c12ee1eSDan Willemsen } else { 27*1c12ee1eSDan Willemsen i.keys = i.keys[1:] 28*1c12ee1eSDan Willemsen } 29*1c12ee1eSDan Willemsen return len(i.keys) > 0 30*1c12ee1eSDan Willemsen} 31*1c12ee1eSDan Willemsen 32*1c12ee1eSDan Willemsenfunc (i *mapIter) Key() reflect.Value { 33*1c12ee1eSDan Willemsen return i.keys[0] 34*1c12ee1eSDan Willemsen} 35*1c12ee1eSDan Willemsen 36*1c12ee1eSDan Willemsenfunc (i *mapIter) Value() reflect.Value { 37*1c12ee1eSDan Willemsen return i.v.MapIndex(i.keys[0]) 38*1c12ee1eSDan Willemsen} 39