| // +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 |
| } |