* 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
 | 
						|
}
 |