gonum.org/v1/gonum@v0.14.0/graph/internal/set/same.go (about) 1 // Copyright ©2014 The Gonum 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 5 //go:build !safe 6 // +build !safe 7 8 package set 9 10 import "unsafe" 11 12 // same determines whether two sets are backed by the same store. In the 13 // current implementation using hash maps it makes use of the fact that 14 // hash maps are passed as a pointer to a runtime Hmap struct. A map is 15 // not seen by the runtime as a pointer though, so we use unsafe to get 16 // the maps' pointer values to compare. 17 func same(a, b Nodes) bool { 18 return *(*uintptr)(unsafe.Pointer(&a)) == *(*uintptr)(unsafe.Pointer(&b)) 19 } 20 21 // intsSame determines whether two sets are backed by the same store. In the 22 // current implementation using hash maps it makes use of the fact that 23 // hash maps are passed as a pointer to a runtime Hmap struct. A map is 24 // not seen by the runtime as a pointer though, so we use unsafe to get 25 // the maps' pointer values to compare. 26 func intsSame(a, b Ints) bool { 27 return *(*uintptr)(unsafe.Pointer(&a)) == *(*uintptr)(unsafe.Pointer(&b)) 28 } 29 30 // int64sSame determines whether two sets are backed by the same store. In the 31 // current implementation using hash maps it makes use of the fact that 32 // hash maps are passed as a pointer to a runtime Hmap struct. A map is 33 // not seen by the runtime as a pointer though, so we use unsafe to get 34 // the maps' pointer values to compare. 35 func int64sSame(a, b Int64s) bool { 36 return *(*uintptr)(unsafe.Pointer(&a)) == *(*uintptr)(unsafe.Pointer(&b)) 37 }