1package gojsonld 2 3import ( 4 "fmt" 5) 6 7type UniqueNamer struct { 8 prefix string 9 counter int 10 existing map[string]string 11} 12 13func NewUniqueNamer(prefix string) *UniqueNamer { 14 return &UniqueNamer{ 15 prefix: prefix, 16 existing: make(map[string]string), 17 } 18} 19 20//TODO: sync/atomic counter 21func (un *UniqueNamer) get(old string) string { 22 if len(old) > 0 { 23 if name := un.existing[old]; len(name) > 0 { 24 return name 25 } 26 } 27 28 name := fmt.Sprintf("%s%d", un.prefix, un.counter) 29 un.counter += 1 30 if len(old) > 0 { 31 un.existing[old] = name 32 } 33 34 return name 35} 36 37func (un *UniqueNamer) contains(key string) bool { 38 return len(un.existing[key]) > 0 39} 40