12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- // +build !go1.9
- package swag
- import (
- "sort"
- "sync"
- )
- // indexOfInitialisms is a thread-safe implementation of the sorted index of initialisms.
- // Before go1.9, this may be implemented with a mutex on the map.
- type indexOfInitialisms struct {
- getMutex *sync.Mutex
- index map[string]bool
- }
- func newIndexOfInitialisms() *indexOfInitialisms {
- return &indexOfInitialisms{
- getMutex: new(sync.Mutex),
- index: make(map[string]bool, 50),
- }
- }
- func (m *indexOfInitialisms) load(initial map[string]bool) *indexOfInitialisms {
- m.getMutex.Lock()
- defer m.getMutex.Unlock()
- for k, v := range initial {
- m.index[k] = v
- }
- return m
- }
- func (m *indexOfInitialisms) isInitialism(key string) bool {
- m.getMutex.Lock()
- defer m.getMutex.Unlock()
- _, ok := m.index[key]
- return ok
- }
- func (m *indexOfInitialisms) add(key string) *indexOfInitialisms {
- m.getMutex.Lock()
- defer m.getMutex.Unlock()
- m.index[key] = true
- return m
- }
- func (m *indexOfInitialisms) sorted() (result []string) {
- m.getMutex.Lock()
- defer m.getMutex.Unlock()
- for k := range m.index {
- result = append(result, k)
- }
- sort.Sort(sort.Reverse(byLength(result)))
- return
- }
|