toastyapps-excelsior 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -1
- data/ext/excelsior_reader/excelsior_reader.c +75 -54
- data/ext/excelsior_reader/excelsior_reader.rl +4 -6
- metadata +2 -2
data/Rakefile
CHANGED
@@ -8,7 +8,7 @@ PKG_FILES = %w(Rakefile) +
|
|
8
8
|
|
9
9
|
gem_spec = Gem::Specification.new do |gem_spec|
|
10
10
|
gem_spec.name = 'excelsior'
|
11
|
-
gem_spec.version = '0.0.
|
11
|
+
gem_spec.version = '0.0.3'
|
12
12
|
gem_spec.summary = 'A Ruby gem that uses C bindings to read CSV files superfast. I\'m totally serial!'
|
13
13
|
gem_spec.description = 'A Ruby gem that uses C bindings to read CSV files superfast. I\'m totally serial!'
|
14
14
|
gem_spec.email = 'matt@toastyapps.com'
|
@@ -17,77 +17,72 @@ VALUE e_parse(VALUE self, VALUE data) {
|
|
17
17
|
int has_found = 0;
|
18
18
|
|
19
19
|
|
20
|
-
#line
|
20
|
+
#line 32 "excelsior_reader.rl"
|
21
21
|
|
22
22
|
|
23
23
|
|
24
24
|
#line 25 "excelsior_reader.c"
|
25
25
|
static const char _excelsior_scan_actions[] = {
|
26
|
-
0, 1,
|
27
|
-
|
28
|
-
|
26
|
+
0, 1, 2, 1, 7, 1, 8, 1,
|
27
|
+
9, 1, 10, 1, 11, 2, 0, 1,
|
28
|
+
2, 3, 4, 2, 3, 5, 2, 3,
|
29
|
+
6
|
29
30
|
};
|
30
31
|
|
31
32
|
static const char _excelsior_scan_key_offsets[] = {
|
32
|
-
0,
|
33
|
+
0, 0, 1, 8, 12, 13
|
33
34
|
};
|
34
35
|
|
35
36
|
static const char _excelsior_scan_trans_keys[] = {
|
36
|
-
|
37
|
-
10, 13,
|
38
|
-
32, 34, 39, 44, 9, 13, 10, 0
|
37
|
+
34, 10, 13, 32, 34, 44, 9, 12,
|
38
|
+
10, 13, 34, 44, 10, 34, 0
|
39
39
|
};
|
40
40
|
|
41
41
|
static const char _excelsior_scan_single_lengths[] = {
|
42
|
-
|
42
|
+
0, 1, 5, 4, 1, 1
|
43
43
|
};
|
44
44
|
|
45
45
|
static const char _excelsior_scan_range_lengths[] = {
|
46
|
-
|
46
|
+
0, 0, 1, 0, 0, 0
|
47
47
|
};
|
48
48
|
|
49
49
|
static const char _excelsior_scan_index_offsets[] = {
|
50
|
-
0,
|
51
|
-
};
|
52
|
-
|
53
|
-
static const char _excelsior_scan_indicies[] = {
|
54
|
-
2, 0, 0, 0, 0, 1, 4, 3,
|
55
|
-
4, 5, 7, 8, 6, 3, 5, 9,
|
56
|
-
6, 1, 2, 10, 10, 10, 10, 1,
|
57
|
-
7, 11, 0
|
50
|
+
0, 0, 2, 9, 14, 16
|
58
51
|
};
|
59
52
|
|
60
53
|
static const char _excelsior_scan_trans_targs[] = {
|
61
|
-
|
62
|
-
|
54
|
+
5, 1, 2, 4, 3, 1, 2, 3,
|
55
|
+
3, 2, 2, 2, 2, 3, 2, 2,
|
56
|
+
1, 2, 2, 2, 2, 2, 0
|
63
57
|
};
|
64
58
|
|
65
59
|
static const char _excelsior_scan_trans_actions[] = {
|
66
|
-
|
67
|
-
|
60
|
+
22, 0, 3, 0, 16, 0, 5, 16,
|
61
|
+
19, 11, 11, 11, 11, 19, 3, 7,
|
62
|
+
0, 9, 11, 11, 7, 9, 0
|
68
63
|
};
|
69
64
|
|
70
65
|
static const char _excelsior_scan_to_state_actions[] = {
|
71
|
-
0, 0,
|
66
|
+
0, 0, 13, 0, 0, 0
|
72
67
|
};
|
73
68
|
|
74
69
|
static const char _excelsior_scan_from_state_actions[] = {
|
75
|
-
0, 0,
|
70
|
+
0, 0, 1, 0, 0, 0
|
76
71
|
};
|
77
72
|
|
78
73
|
static const char _excelsior_scan_eof_trans[] = {
|
79
|
-
|
74
|
+
0, 20, 0, 20, 21, 22
|
80
75
|
};
|
81
76
|
|
82
|
-
static const int excelsior_scan_start =
|
83
|
-
static const int excelsior_scan_error =
|
77
|
+
static const int excelsior_scan_start = 2;
|
78
|
+
static const int excelsior_scan_error = 0;
|
84
79
|
|
85
|
-
static const int excelsior_scan_en_main =
|
80
|
+
static const int excelsior_scan_en_main = 2;
|
86
81
|
|
87
82
|
|
88
|
-
#line
|
83
|
+
#line 35 "excelsior_reader.rl"
|
89
84
|
|
90
|
-
#line
|
85
|
+
#line 86 "excelsior_reader.c"
|
91
86
|
{
|
92
87
|
cs = excelsior_scan_start;
|
93
88
|
ts = 0;
|
@@ -95,9 +90,9 @@ static const int excelsior_scan_en_main = 3;
|
|
95
90
|
act = 0;
|
96
91
|
}
|
97
92
|
|
98
|
-
#line
|
93
|
+
#line 36 "excelsior_reader.rl"
|
99
94
|
|
100
|
-
#line
|
95
|
+
#line 96 "excelsior_reader.c"
|
101
96
|
{
|
102
97
|
int _klen;
|
103
98
|
unsigned int _trans;
|
@@ -107,16 +102,18 @@ static const int excelsior_scan_en_main = 3;
|
|
107
102
|
|
108
103
|
if ( p == pe )
|
109
104
|
goto _test_eof;
|
105
|
+
if ( cs == 0 )
|
106
|
+
goto _out;
|
110
107
|
_resume:
|
111
108
|
_acts = _excelsior_scan_actions + _excelsior_scan_from_state_actions[cs];
|
112
109
|
_nacts = (unsigned int) *_acts++;
|
113
110
|
while ( _nacts-- > 0 ) {
|
114
111
|
switch ( *_acts++ ) {
|
115
|
-
case
|
112
|
+
case 2:
|
116
113
|
#line 1 "excelsior_reader.rl"
|
117
114
|
{ts = p;}
|
118
115
|
break;
|
119
|
-
#line
|
116
|
+
#line 117 "excelsior_reader.c"
|
120
117
|
}
|
121
118
|
}
|
122
119
|
|
@@ -169,7 +166,6 @@ _resume:
|
|
169
166
|
}
|
170
167
|
|
171
168
|
_match:
|
172
|
-
_trans = _excelsior_scan_indicies[_trans];
|
173
169
|
_eof_trans:
|
174
170
|
cs = _excelsior_scan_trans_targs[_trans];
|
175
171
|
|
@@ -182,39 +178,57 @@ _eof_trans:
|
|
182
178
|
{
|
183
179
|
switch ( *_acts++ )
|
184
180
|
{
|
185
|
-
case
|
181
|
+
case 3:
|
186
182
|
#line 1 "excelsior_reader.rl"
|
187
183
|
{te = p+1;}
|
188
184
|
break;
|
189
|
-
case 3:
|
190
|
-
#line 28 "excelsior_reader.rl"
|
191
|
-
{te = p+1;{ rb_ary_push(rows, arr); arr = rb_ary_new(); }}
|
192
|
-
break;
|
193
185
|
case 4:
|
194
|
-
#line
|
195
|
-
{
|
186
|
+
#line 27 "excelsior_reader.rl"
|
187
|
+
{act = 2;}
|
196
188
|
break;
|
197
189
|
case 5:
|
198
|
-
#line
|
199
|
-
{
|
190
|
+
#line 28 "excelsior_reader.rl"
|
191
|
+
{act = 3;}
|
200
192
|
break;
|
201
193
|
case 6:
|
202
|
-
#line
|
203
|
-
{
|
194
|
+
#line 29 "excelsior_reader.rl"
|
195
|
+
{act = 4;}
|
204
196
|
break;
|
205
197
|
case 7:
|
206
|
-
#line
|
207
|
-
{te = p;
|
198
|
+
#line 26 "excelsior_reader.rl"
|
199
|
+
{te = p+1;{ rb_ary_push(rows, arr); arr = rb_ary_new(); }}
|
208
200
|
break;
|
209
201
|
case 8:
|
210
202
|
#line 30 "excelsior_reader.rl"
|
211
|
-
{te = p;
|
203
|
+
{te = p+1;{ if(has_found == 0) rb_ary_push(arr, Qnil); has_found = 0;}}
|
212
204
|
break;
|
213
205
|
case 9:
|
214
|
-
#line
|
215
|
-
{
|
206
|
+
#line 26 "excelsior_reader.rl"
|
207
|
+
{te = p;p--;{ rb_ary_push(rows, arr); arr = rb_ary_new(); }}
|
208
|
+
break;
|
209
|
+
case 10:
|
210
|
+
#line 29 "excelsior_reader.rl"
|
211
|
+
{te = p;p--;{ rb_ary_push(arr, rb_str_new(ts + 1, te - ts - 2)); has_found = 1;}}
|
212
|
+
break;
|
213
|
+
case 11:
|
214
|
+
#line 1 "excelsior_reader.rl"
|
215
|
+
{ switch( act ) {
|
216
|
+
case 0:
|
217
|
+
{{cs = 0; goto _again;}}
|
218
|
+
break;
|
219
|
+
case 3:
|
220
|
+
{{p = ((te))-1;} rb_ary_push(arr, rb_str_new(ts, te - ts)); has_found = 1;}
|
216
221
|
break;
|
217
|
-
|
222
|
+
case 4:
|
223
|
+
{{p = ((te))-1;} rb_ary_push(arr, rb_str_new(ts + 1, te - ts - 2)); has_found = 1;}
|
224
|
+
break;
|
225
|
+
default:
|
226
|
+
{{p = ((te))-1;}}
|
227
|
+
break;
|
228
|
+
}
|
229
|
+
}
|
230
|
+
break;
|
231
|
+
#line 232 "excelsior_reader.c"
|
218
232
|
}
|
219
233
|
}
|
220
234
|
|
@@ -227,10 +241,16 @@ _again:
|
|
227
241
|
#line 1 "excelsior_reader.rl"
|
228
242
|
{ts = 0;}
|
229
243
|
break;
|
230
|
-
|
244
|
+
case 1:
|
245
|
+
#line 1 "excelsior_reader.rl"
|
246
|
+
{act = 0;}
|
247
|
+
break;
|
248
|
+
#line 249 "excelsior_reader.c"
|
231
249
|
}
|
232
250
|
}
|
233
251
|
|
252
|
+
if ( cs == 0 )
|
253
|
+
goto _out;
|
234
254
|
if ( ++p != pe )
|
235
255
|
goto _resume;
|
236
256
|
_test_eof: {}
|
@@ -242,9 +262,10 @@ _again:
|
|
242
262
|
}
|
243
263
|
}
|
244
264
|
|
265
|
+
_out: {}
|
245
266
|
}
|
246
267
|
|
247
|
-
#line
|
268
|
+
#line 37 "excelsior_reader.rl"
|
248
269
|
if(RARRAY_LEN(arr) > 0) {
|
249
270
|
rb_ary_push(rows, arr);
|
250
271
|
}
|
@@ -18,12 +18,10 @@ VALUE e_parse(VALUE self, VALUE data) {
|
|
18
18
|
machine excelsior_scan;
|
19
19
|
delimeter = ",";
|
20
20
|
newline = "\r"? "\n" | "\r" | "\n";
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
word = letter+;
|
26
|
-
value = word (" "+ word)*;
|
21
|
+
schar = any - '"';
|
22
|
+
letter = any - delimeter - '"' - newline;
|
23
|
+
string = '"' (schar | '""')* '"' ;
|
24
|
+
value = letter+;
|
27
25
|
main := |*
|
28
26
|
newline { rb_ary_push(rows, arr); arr = rb_ary_new(); };
|
29
27
|
space;
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: toastyapps-excelsior
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Mongeau
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-08-
|
12
|
+
date: 2009-08-17 21:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|