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