2
2
3
3
import java .io .IOException ;
4
4
import java .io .InputStream ;
5
- import java .util .LinkedHashMap ;
6
5
import java .util .Map ;
7
6
import java .util .Map .Entry ;
8
7
import java .util .Set ;
9
8
10
9
import jregex .Matcher ;
11
- import jregex .Pattern ;
12
10
13
11
/**
14
12
* This parser creates a Matcher set per-Thread using a ThreadLocal<Map>. It is faster than
22
20
public class MultithreadedUASparser extends SingleThreadedUASparser {
23
21
24
22
private ThreadLocal <Map <Matcher , Long >> compiledBrowserMatcherMapT ;
25
-
26
23
private ThreadLocal <Map <Matcher , Long >> compiledOsMatcherMapT ;
27
-
28
24
private ThreadLocal <Map <Matcher , Long >> compiledDeviceMatcherMapT ;
29
25
30
26
public MultithreadedUASparser (InputStream inputStreamToDefinitionFile ) throws IOException {
@@ -40,12 +36,7 @@ protected void preCompileBrowserRegMap() {
40
36
compiledBrowserMatcherMapT = new ThreadLocal <Map <Matcher , Long >>() {
41
37
@ Override
42
38
protected Map <Matcher , Long > initialValue () {
43
- LinkedHashMap <Matcher , Long > tmpMap = new LinkedHashMap <Matcher , Long >(browserRegMap .size ());
44
- for (Map .Entry <String , Long > entry : browserRegMap .entrySet ()) {
45
- Pattern pattern = new Pattern (entry .getKey (), Pattern .IGNORE_CASE | Pattern .DOTALL );
46
- tmpMap .put (pattern .matcher (), entry .getValue ());
47
- }
48
- return tmpMap ;
39
+ return preCompileBrowserMatcherMap ();
49
40
}
50
41
};
51
42
}
@@ -55,13 +46,7 @@ protected void preCompileOsRegMap() {
55
46
compiledOsMatcherMapT = new ThreadLocal <Map <Matcher , Long >>() {
56
47
@ Override
57
48
protected Map <Matcher , Long > initialValue () {
58
- LinkedHashMap <Matcher , Long > tmpMap = new LinkedHashMap <Matcher , Long >(osRegMap .size ());
59
- for (Map .Entry <String , Long > entry : osRegMap .entrySet ()) {
60
- Pattern pattern = new Pattern (entry .getKey (), Pattern .IGNORE_CASE | Pattern .DOTALL );
61
- tmpMap .put (pattern .matcher (), entry .getValue ());
62
- }
63
-
64
- return tmpMap ;
49
+ return preCompileOsMatcherMap ();
65
50
}
66
51
};
67
52
}
@@ -71,17 +56,7 @@ protected void preCompileDeviceRegMap() {
71
56
compiledDeviceMatcherMapT = new ThreadLocal <Map <Matcher ,Long >>() {
72
57
@ Override
73
58
protected Map <Matcher , Long > initialValue () {
74
- if (deviceRegMap == null ) {
75
- return null ; // skip for older ini files
76
- }
77
- LinkedHashMap <Matcher , Long > compiledDeviceMatcherMap =
78
- new LinkedHashMap <Matcher , Long >(deviceRegMap .size ());
79
-
80
- for (Map .Entry <String , Long > entry : deviceRegMap .entrySet ()) {
81
- Pattern pattern = new Pattern (entry .getKey (), Pattern .IGNORE_CASE | Pattern .DOTALL );
82
- compiledDeviceMatcherMap .put (pattern .matcher (), entry .getValue ());
83
- }
84
- return compiledDeviceMatcherMap ;
59
+ return preCompileDeviceMatcherMap ();
85
60
}
86
61
};
87
62
}
0 commit comments