* add usage docs for context types and metadata, improve comments * changes after review
38 lines
717 B
Go
38 lines
717 B
Go
package metadata
|
|
|
|
import "sort"
|
|
|
|
type Iterator struct {
|
|
md Metadata
|
|
keys []string
|
|
cur int
|
|
cnt int
|
|
}
|
|
|
|
// Next advances the iterator to the next element.
|
|
func (iter *Iterator) Next(k *string, v *[]string) bool {
|
|
if iter.cur+1 > iter.cnt {
|
|
return false
|
|
}
|
|
|
|
if k != nil && v != nil {
|
|
*k = iter.keys[iter.cur]
|
|
vv := iter.md[*k]
|
|
*v = make([]string, len(vv))
|
|
copy(*v, vv)
|
|
iter.cur++
|
|
}
|
|
return true
|
|
}
|
|
|
|
// Iterator returns an iterator for iterating over metadata in sorted order.
|
|
func (md Metadata) Iterator() *Iterator {
|
|
iter := &Iterator{md: md, cnt: len(md)}
|
|
iter.keys = make([]string, 0, iter.cnt)
|
|
for k := range md {
|
|
iter.keys = append(iter.keys, k)
|
|
}
|
|
sort.Strings(iter.keys)
|
|
return iter
|
|
}
|