podman
1// Package intern interns strings.
2// Interning is best effort only.
3// Interned strings may be removed automatically
4// at any time without notification.
5// All functions may be called concurrently
6// with themselves and each other.
7package intern
8
9import "sync"
10
11var (
12pool sync.Pool = sync.Pool{
13New: func() interface{} {
14return make(map[string]string)
15},
16}
17)
18
19// String returns s, interned.
20func String(s string) string {
21m := pool.Get().(map[string]string)
22c, ok := m[s]
23if ok {
24pool.Put(m)
25return c
26}
27m[s] = s
28pool.Put(m)
29return s
30}
31
32// Bytes returns b converted to a string, interned.
33func Bytes(b []byte) string {
34m := pool.Get().(map[string]string)
35c, ok := m[string(b)]
36if ok {
37pool.Put(m)
38return c
39}
40s := string(b)
41m[s] = s
42pool.Put(m)
43return s
44}
45