From 97a01b7b17904dcd4e2c2dc375774ad0bd75d220 Mon Sep 17 00:00:00 2001 From: Josh Bleecher Snyder Date: Tue, 15 Mar 2022 15:44:28 -0700 Subject: [PATCH] util/deephash: remove Tailscale toolchain compatibility shim The future is now. Signed-off-by: Josh Bleecher Snyder --- util/deephash/deephash.go | 14 ++++++----- util/deephash/mapiter.go | 38 ----------------------------- util/deephash/mapiter_future.go | 43 --------------------------------- 3 files changed, 8 insertions(+), 87 deletions(-) delete mode 100644 util/deephash/mapiter.go delete mode 100644 util/deephash/mapiter_future.go diff --git a/util/deephash/deephash.go b/util/deephash/deephash.go index b30ccd19b..719662869 100644 --- a/util/deephash/deephash.go +++ b/util/deephash/deephash.go @@ -328,19 +328,21 @@ func (c *valueCache) get(t reflect.Type) reflect.Value { func (h *hasher) hashMap(v reflect.Value) { mh := mapHasherPool.Get().(*mapHasher) defer mapHasherPool.Put(mh) - iter := mapIter(&mh.iter, v) - defer mapIter(&mh.iter, reflect.Value{}) // avoid pinning v from mh.iter when we return + + iter := &mh.iter + iter.Reset(v) + defer iter.Reset(reflect.Value{}) // avoid pinning v from mh.iter when we return var sum Sum k := mh.val.get(v.Type().Key()) e := mh.val.get(v.Type().Elem()) mh.h.visitStack = h.visitStack // always use the parent's visit stack to avoid cycles for iter.Next() { - key := iterKey(iter, k) - val := iterVal(iter, e) + k.SetIterKey(iter) + e.SetIterValue(iter) mh.h.reset() - mh.h.hashValue(key) - mh.h.hashValue(val) + mh.h.hashValue(k) + mh.h.hashValue(v) sum.xor(mh.h.sum()) } h.bw.Write(append(h.scratch[:0], sum.sum[:]...)) // append into scratch to avoid heap allocation diff --git a/util/deephash/mapiter.go b/util/deephash/mapiter.go deleted file mode 100644 index 65f617885..000000000 --- a/util/deephash/mapiter.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) 2021 Tailscale Inc & 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 !tailscale_go -// +build !tailscale_go - -package deephash - -import "reflect" - -// iterKey returns the current iter key. -// scratch is a re-usable reflect.Value. -// iterKey may store the iter key in scratch and return scratch, -// or it may allocate and return a new reflect.Value. -func iterKey(iter *reflect.MapIter, _ reflect.Value) reflect.Value { - return iter.Key() -} - -// iterVal returns the current iter val. -// scratch is a re-usable reflect.Value. -// iterVal may store the iter val in scratch and return scratch, -// or it may allocate and return a new reflect.Value. -func iterVal(iter *reflect.MapIter, _ reflect.Value) reflect.Value { - return iter.Value() -} - -// mapIter returns a map iterator for mapVal. -// scratch is a re-usable reflect.MapIter. -// mapIter may re-use scratch and return it, -// or it may allocate and return a new *reflect.MapIter. -// If mapVal is the zero reflect.Value, mapIter may return nil. -func mapIter(_ *reflect.MapIter, mapVal reflect.Value) *reflect.MapIter { - if !mapVal.IsValid() { - return nil - } - return mapVal.MapRange() -} diff --git a/util/deephash/mapiter_future.go b/util/deephash/mapiter_future.go deleted file mode 100644 index d2906c5e1..000000000 --- a/util/deephash/mapiter_future.go +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) 2021 Tailscale Inc & 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 tailscale_go -// +build tailscale_go - -package deephash - -import "reflect" - -// iterKey returns the current iter key. -// scratch is a re-usable reflect.Value. -// iterKey may store the iter key in scratch and return scratch, -// or it may allocate and return a new reflect.Value. -func iterKey(iter *reflect.MapIter, scratch reflect.Value) reflect.Value { - iter.SetKey(scratch) - return scratch -} - -// iterVal returns the current iter val. -// scratch is a re-usable reflect.Value. -// iterVal may store the iter val in scratch and return scratch, -// or it may allocate and return a new reflect.Value. -func iterVal(iter *reflect.MapIter, scratch reflect.Value) reflect.Value { - iter.SetValue(scratch) - return scratch -} - -// mapIter returns a map iterator for mapVal. -// scratch is a re-usable reflect.MapIter. -// mapIter may re-use scratch and return it, -// or it may allocate and return a new *reflect.MapIter. -// If mapVal is the zero reflect.Value, mapIter may return nil. -func mapIter(scratch *reflect.MapIter, mapVal reflect.Value) *reflect.MapIter { - scratch.Reset(mapVal) // always Reset, to allow the caller to avoid pinning memory - if !mapVal.IsValid() { - // Returning scratch would also be OK. - // Do this for consistency with the non-optimized version. - return nil - } - return scratch -}