MCPcopy
hub / github.com/redis/go-redis / makeSliceNextElemFunc

Function makeSliceNextElemFunc

internal/proto/scan.go:154–185  ·  view source on GitHub ↗
(v reflect.Value)

Source from the content-addressed store, hash-verified

152}
153
154func makeSliceNextElemFunc(v reflect.Value) func() reflect.Value {
155 elemType := v.Type().Elem()
156
157 if elemType.Kind() == reflect.Ptr {
158 elemType = elemType.Elem()
159 return func() reflect.Value {
160 if v.Len() < v.Cap() {
161 v.Set(v.Slice(0, v.Len()+1))
162 elem := v.Index(v.Len() - 1)
163 if elem.IsNil() {
164 elem.Set(reflect.New(elemType))
165 }
166 return elem.Elem()
167 }
168
169 elem := reflect.New(elemType)
170 v.Set(reflect.Append(v, elem))
171 return elem.Elem()
172 }
173 }
174
175 zero := reflect.Zero(elemType)
176 return func() reflect.Value {
177 if v.Len() < v.Cap() {
178 v.Set(v.Slice(0, v.Len()+1))
179 return v.Index(v.Len() - 1)
180 }
181
182 v.Set(reflect.Append(v, zero))
183 return v.Index(v.Len() - 1)
184 }
185}

Callers 1

ScanSliceFunction · 0.85

Calls 5

SliceMethod · 0.80
TypeMethod · 0.65
LenMethod · 0.65
SetMethod · 0.65
AppendMethod · 0.65

Tested by

no test coverage detected