|
1234567891011121314151617181920212223242526272829303132333435363738 |
- // 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.
-
- //go:build !go1.12
- // +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])
- }
|