1
- * * * * * *
1
+ * * * * * *
2
2
// Package intern interns strings.
3
3
[] [-----] [----] [-----] [-----]|
4
4
5
- b b b
6
- * * * * * * *
5
+ b b
6
+ * * * * * * *
7
7
// Interning is best effort only.
8
8
[] [-------] [] [--] [----] [--]|
9
9
10
- g b
11
- * * * * * * *
10
+ g
11
+ * * * * * * *
12
12
// Interned strings may be removed automatically
13
13
[] [------] [-----] [-] [] [-----] [-----------]
14
14
15
- r b g
16
- * * * * * * *
15
+ r b b g
16
+ * * * * * * *
17
17
// at any time without notification.
18
18
[] [] [-] [--] [-----] [----------]|
19
19
20
- p b g b
21
- * * * * * * *
20
+ p b b b b b
21
+ * * * * * * *
22
22
// All functions may be called concurrently
23
23
[] [-] [-------] [-] [] [----] [----------]
24
24
25
- y b b b b r
26
- * * * * * * *
25
+ y b g b gr
26
+ * * * * * * *
27
27
// with themselves and each other.
28
28
[] [--] [--------] [-] [--] [---]|
29
29
30
- b
31
- * *
30
+ g
31
+ * *
32
32
package intern
33
33
[-----] [----]
34
34
35
- b b b
36
- * * * *
35
+ g b
36
+ * * * *
37
37
import "sync"
38
38
[----] |[--]|
39
39
40
- g g g pb r yg
41
- * * * ** * * ** *
40
+ b g r p b p y g
41
+ * * * * * * * * * *
42
42
var pool sync.Pool = sync.Pool{
43
43
[-] [--] [--]|[--] | [--]|[--]|
44
44
45
- b b g b g
46
- ** * ** * ** *
45
+ b b g b g
46
+ ** * ** * ** *
47
47
␉New: func() interface{} {
48
48
[-]| [--]|| [-------]|| |
49
49
50
- b b b r b p b
51
- * * * ** *** *
50
+ g b b b b r b
51
+ * * * ** ** * *
52
52
␉␉return make(map[string]string)
53
53
[----] [--]|[-]|[----]|[----]|
54
54
62
62
}
63
63
|
64
64
65
- 1 y g 1b g1
66
- * * * ** **
65
+ 1 p r bb r1
66
+ * * * ** **
67
67
// String returns s, interned.
68
68
[] [----] [-----] || [------]|
69
69
70
- g gg2 b g r
71
- * *** * * x *
70
+ g ggg y g 1 r
71
+ * *** * * * *
72
72
func String(s string) string {
73
73
[--] [----]|| [----]| [----] |
74
74
75
- g bb g 2 g rr p g b b p
76
- * ** * * * **x* * *v *w *
75
+ b bb r 2 g rr p g b r b 2 p
76
+ * ** * * * **x* * * * * * *
77
77
␉m := pool.Get().(map[string]string)
78
78
| || [--]|[-]||||[-]|[----]|[----]|
79
79
80
- gg g gg rg g
81
- ** * ** **o *
80
+ rg g gg ggrg
81
+ ** * ** *** *
82
82
␉c, ok := m[s]
83
83
|| [] || ||||
84
84
85
- r r p
86
- * * *
85
+ b r p
86
+ * * *
87
87
␉if ok {
88
88
[] [] |
89
89
90
- r r ypy
90
+ r p yry
91
91
*v * ***
92
92
␉␉pool.Put(m)
93
93
[--]|[-]|||
94
94
95
- r r
95
+ r p
96
96
* *
97
97
␉␉return c
98
98
[----] |
@@ -102,18 +102,18 @@ func String(s string) string {
102
102
␉}
103
103
|
104
104
105
- yr r r
106
- **#* * ^
105
+ prpr r y
106
+ **** * *
107
107
␉m[s] = s
108
108
|||| | |
109
109
110
- p p 111
110
+ p y 1y1
111
111
* w * ***
112
112
␉pool.Put(m)
113
113
[--]|[-]|||
114
114
115
- b
116
- * 0
115
+ p 1
116
+ * *
117
117
␉return s
118
118
[----] |
119
119
122
122
}
123
123
|
124
124
125
- 2 r g p r g r rr p
126
- * * * * * * * ** * o
125
+ 2 y 1 b g y r rr y
126
+ * * * * * * * ** * o
127
127
// Bytes returns b converted to a string, interned.
128
128
[] [---] [-----] | [-------] [] | [----]| [------]|
129
129
130
- p g 2y pp r 2 p y
131
- * * ** ** * * * *
130
+ 2 1 2g pp 2 2 p y
131
+ * * ** ** * * * *
132
132
func Bytes(b []byte) string {
133
133
[--] [---]|| ||[--]| [----] |
134
134
135
- 2 rp p y p y y
136
- * ** *# * xx^v * *> *~ v
135
+ 1 rp p 1 p y p y
136
+ * ** *# * xx^v * * * * x v
137
137
␉m := pool.Get().(map[string]string)
138
138
| || [--]|[-]||||[-]|[----]|[----]|
139
139
140
- pp r py 1 1 1
141
- ** * ** x*+ w*w*
140
+ yp p py 21 r 1
141
+ ** * ** ** v w*w*
142
142
␉c, ok := m[string(b)]
143
143
|| [] || ||[----]||||
144
144
145
- y y 1
146
- * * *
145
+ g y 1
146
+ * * *
147
147
␉if ok {
148
148
[] [] |
149
149
150
- y y
151
- *0 * ovo
150
+ y
151
+ *0 x oxo
152
152
␉␉pool.Put(m)
153
153
[--]|[-]|||
154
154
155
- 1 y
155
+ 2 1
156
156
* *
157
157
␉␉return c
158
158
[----] |
@@ -162,23 +162,22 @@ func Bytes(b []byte) string {
162
162
␉}
163
163
|
164
164
165
- b y1 y 2
166
- x ** *#*#
165
+ 2 y1 y p
166
+ * ** *#*#
167
167
␉s := string(b)
168
168
| || [----]|||
169
169
170
- 2b2 2 b
171
- w*v* * w
170
+ 2 2 2
171
+ v*x* * v
172
172
␉m[s] = s
173
173
|||| | |
174
174
175
- 1 1
176
- * > * ^o ^
175
+ 1
176
+ * > v ^w ^
177
177
␉pool.Put(m)
178
178
[--]|[-]|||
179
179
180
- 2 b
181
- * o
180
+ x w
182
181
␉return s
183
182
[----] |
184
183
0 commit comments