MCPcopy Create free account
hub / github.com/egonelbre/exp / Add

Method Add

reflectmap/reflect_interface.go:56–84  ·  view source on GitHub ↗

* type bucketType struct { hash [bucketSize]byte key [bucketSize]keyType value [bucketSize]valueType } */

(key, value interface{})

Source from the content-addressed store, hash-verified

54*/
55
56func (m *Map) Add(key, value interface{}) {
57 // hack to avoid figuring out a hash function
58 keyi := key.(int)
59
60 bucketi := keyi % m.bucketCount
61 tophash := byte(keyi)
62 if tophash == 0 {
63 tophash = 1
64 }
65
66 bucket := m.buckets.Elem().Index(bucketi)
67 hashesField := bucket.Field(0)
68 keys := bucket.Field(1)
69 values := bucket.Field(2)
70
71 hashes := hashesField.Addr().Interface().(*hashBucket)
72 for i, v := range *hashes {
73 if v == 0 {
74 (*hashes)[i] = tophash
75 keys.Index(i).Set(reflect.ValueOf(key))
76 values.Index(i).Set(reflect.ValueOf(value))
77 return
78 }
79 }
80
81 (*hashes)[0] = tophash
82 keys.Index(0).Set(reflect.ValueOf(key))
83 values.Index(0).Set(reflect.ValueOf(value))
84}

Callers 2

TestReflectFunction · 0.95
BenchmarkReflectFunction · 0.95

Calls 1

SetMethod · 0.65

Tested by 2

TestReflectFunction · 0.76
BenchmarkReflectFunction · 0.76