fast_blank 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +5 -0
- data/benchmark +17 -0
- data/ext/fast_blank/fast_blank.c +36 -25
- metadata +7 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 171bfb8d6bbf40369a5b4e1135ca2bca72950173
|
4
|
+
data.tar.gz: beadd5011d64a71bba5c435c91a1c4d0983794a4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3c9aef69d8f30162ec6b9aeb195fc9e4c6fb37e57def7a3db12ac791554cfd1321e6445521cb419d0c498ca67409fcdd58fa380c1da91e85d793caeab06db2cf
|
7
|
+
data.tar.gz: 5ddd68f7bbfdbc6f18304ff31968a434e17438c68fde5bddd0deb758427b3e31bceb06a9cb672e9ebe275122bec23dbbebc77c08d210b143f4040514d9d90f66
|
data/README.md
CHANGED
@@ -53,5 +53,10 @@ Author: Sam Saffron sam.saffron@gmail.com
|
|
53
53
|
http://github.com/SamSaffron/fast_blank
|
54
54
|
License: MIT
|
55
55
|
|
56
|
+
### Change log:
|
57
|
+
|
58
|
+
0.0.2:
|
59
|
+
- Removed rake dependency (tmm1)
|
60
|
+
- Unrolled internal loop to improve perf (tmm1)
|
56
61
|
|
57
62
|
(gem template based on https://github.com/CodeMonkeySteve/fast_xor )
|
data/benchmark
CHANGED
@@ -38,3 +38,20 @@ Benchmark.bmbm do |x|
|
|
38
38
|
#x.report("Empty #{s.length} :") do n.times { s.empty? } end
|
39
39
|
end
|
40
40
|
end
|
41
|
+
|
42
|
+
user system total real
|
43
|
+
# Fast Blank 0 : 0.050000 0.000000 0.050000 ( 0.048928)
|
44
|
+
# Fast Blank (Active Support) 0 : 0.050000 0.000000 0.050000 ( 0.049967)
|
45
|
+
# Slow Blank 0 : 0.290000 0.000000 0.290000 ( 0.295086)
|
46
|
+
# Fast Blank 6 : 0.090000 0.000000 0.090000 ( 0.089295)
|
47
|
+
# Fast Blank (Active Support) 6 : 0.090000 0.000000 0.090000 ( 0.089648)
|
48
|
+
# Slow Blank 6 : 0.420000 0.000000 0.420000 ( 0.418375)
|
49
|
+
# Fast Blank 14 : 0.060000 0.000000 0.060000 ( 0.056642)
|
50
|
+
# Fast Blank (Active Support) 14 : 0.060000 0.000000 0.060000 ( 0.061443)
|
51
|
+
# Slow Blank 14 : 0.670000 0.000000 0.670000 ( 0.668229)
|
52
|
+
# Fast Blank 24 : 0.070000 0.000000 0.070000 ( 0.075878)
|
53
|
+
# Fast Blank (Active Support) 24 : 0.090000 0.000000 0.090000 ( 0.088610)
|
54
|
+
# Slow Blank 24 : 0.650000 0.000000 0.650000 ( 0.650736)
|
55
|
+
# Fast Blank 136 : 0.070000 0.000000 0.070000 ( 0.075540)
|
56
|
+
# Fast Blank (Active Support) 136 : 0.090000 0.000000 0.090000 ( 0.087240)
|
57
|
+
# Slow Blank 136 : 0.660000 0.000000 0.660000 ( 0.655168)
|
data/ext/fast_blank/fast_blank.c
CHANGED
@@ -13,19 +13,11 @@
|
|
13
13
|
#define RSTRING_LEN(s) (RSTRING(s)->len)
|
14
14
|
#endif
|
15
15
|
|
16
|
-
const unsigned int as_blank[26] = {9, 0xa, 0xb, 0xc, 0xd,
|
17
|
-
0x20, 0x85, 0xa0, 0x1680, 0x180e, 0x2000, 0x2001,
|
18
|
-
0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008,
|
19
|
-
0x2009, 0x200a, 0x2028, 0x2029, 0x202f, 0x205f, 0x3000
|
20
|
-
};
|
21
|
-
|
22
16
|
static VALUE
|
23
17
|
rb_str_blank_as(VALUE str)
|
24
18
|
{
|
25
19
|
rb_encoding *enc;
|
26
20
|
char *s, *e;
|
27
|
-
int i;
|
28
|
-
int found;
|
29
21
|
|
30
22
|
enc = STR_ENC_GET(str);
|
31
23
|
s = RSTRING_PTR(str);
|
@@ -33,22 +25,41 @@ rb_str_blank_as(VALUE str)
|
|
33
25
|
|
34
26
|
e = RSTRING_END(str);
|
35
27
|
while (s < e) {
|
36
|
-
|
37
|
-
|
28
|
+
int n;
|
29
|
+
unsigned int cc = rb_enc_codepoint_len(s, e, &n, enc);
|
38
30
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
31
|
+
switch (cc) {
|
32
|
+
case 9:
|
33
|
+
case 0xa:
|
34
|
+
case 0xb:
|
35
|
+
case 0xc:
|
36
|
+
case 0xd:
|
37
|
+
case 0x20:
|
38
|
+
case 0x85:
|
39
|
+
case 0xa0:
|
40
|
+
case 0x1680:
|
41
|
+
case 0x180e:
|
42
|
+
case 0x2000:
|
43
|
+
case 0x2001:
|
44
|
+
case 0x2002:
|
45
|
+
case 0x2003:
|
46
|
+
case 0x2004:
|
47
|
+
case 0x2005:
|
48
|
+
case 0x2006:
|
49
|
+
case 0x2007:
|
50
|
+
case 0x2008:
|
51
|
+
case 0x2009:
|
52
|
+
case 0x200a:
|
53
|
+
case 0x2028:
|
54
|
+
case 0x2029:
|
55
|
+
case 0x202f:
|
56
|
+
case 0x205f:
|
57
|
+
case 0x3000:
|
58
|
+
/* found */
|
59
|
+
break;
|
60
|
+
default:
|
61
|
+
return Qfalse;
|
49
62
|
}
|
50
|
-
|
51
|
-
if (!found) return Qfalse;
|
52
63
|
s += n;
|
53
64
|
}
|
54
65
|
return Qtrue;
|
@@ -66,10 +77,10 @@ rb_str_blank(VALUE str)
|
|
66
77
|
|
67
78
|
e = RSTRING_END(str);
|
68
79
|
while (s < e) {
|
69
|
-
|
70
|
-
|
80
|
+
int n;
|
81
|
+
unsigned int cc = rb_enc_codepoint_len(s, e, &n, enc);
|
71
82
|
|
72
|
-
|
83
|
+
if (!rb_isspace(cc) && cc != 0) return Qfalse;
|
73
84
|
s += n;
|
74
85
|
}
|
75
86
|
return Qtrue;
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fast_blank
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Saffron
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-11-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: rake
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - '>='
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - '>='
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: rake-compiler
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -31,7 +17,7 @@ dependencies:
|
|
31
17
|
- - '>='
|
32
18
|
- !ruby/object:Gem::Version
|
33
19
|
version: '0'
|
34
|
-
type: :
|
20
|
+
type: :development
|
35
21
|
prerelease: false
|
36
22
|
version_requirements: !ruby/object:Gem::Requirement
|
37
23
|
requirements:
|
@@ -66,8 +52,9 @@ files:
|
|
66
52
|
- ext/fast_blank/fast_blank.c
|
67
53
|
- ext/fast_blank/extconf.rb
|
68
54
|
- spec/fast_blank_spec.rb
|
69
|
-
homepage:
|
70
|
-
licenses:
|
55
|
+
homepage: https://github.com/SamSaffron/fast_blank
|
56
|
+
licenses:
|
57
|
+
- MIT
|
71
58
|
metadata: {}
|
72
59
|
post_install_message:
|
73
60
|
rdoc_options: []
|
@@ -85,7 +72,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
85
72
|
version: '0'
|
86
73
|
requirements: []
|
87
74
|
rubyforge_project:
|
88
|
-
rubygems_version: 2.0.
|
75
|
+
rubygems_version: 2.0.3
|
89
76
|
signing_key:
|
90
77
|
specification_version: 4
|
91
78
|
summary: Fast String blank? implementation
|