slow_blink 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/slow_blink/ext_schema_parser/extconf.rb +1 -0
- data/ext/slow_blink/ext_schema_parser/lexer.c +6 -8
- data/ext/slow_blink/ext_schema_parser/lexer.h +1 -1
- data/ext/slow_blink/ext_schema_parser/parser.c +3 -1
- data/ext/slow_blink/message/ext_compact_encoder/ext_compact_encoder.c +46 -24
- data/ext/slow_blink/message/ext_compact_encoder/extconf.rb +9 -2
- data/lib/slow_blink/enum.rb +4 -1
- data/lib/slow_blink/field.rb +1 -1
- data/lib/slow_blink/generate_c/model.rb +119 -12
- data/lib/slow_blink/message/binary.rb +9 -1
- data/lib/slow_blink/message/boolean.rb +12 -3
- data/lib/slow_blink/message/date.rb +9 -1
- data/lib/slow_blink/message/decimal.rb +9 -1
- data/lib/slow_blink/message/dynamic_group.rb +132 -0
- data/lib/slow_blink/message/enum.rb +6 -2
- data/lib/slow_blink/message/field.rb +67 -43
- data/lib/slow_blink/message/fixed.rb +5 -1
- data/lib/slow_blink/message/floating_point.rb +9 -1
- data/lib/slow_blink/message/group.rb +54 -197
- data/lib/slow_blink/message/integer.rb +16 -8
- data/lib/slow_blink/message/model.rb +20 -18
- data/lib/slow_blink/message/static_group.rb +63 -0
- data/lib/slow_blink/message/string.rb +9 -1
- data/lib/slow_blink/message/test_data.rb +126 -0
- data/lib/slow_blink/message/time.rb +10 -2
- data/lib/slow_blink/message/time_of_day.rb +18 -2
- data/lib/slow_blink/schema.rb +2 -2
- data/lib/slow_blink/type.rb +3 -3
- data/lib/slow_blink/version.rb +1 -1
- data/test/tc_inputs.rb +34 -25
- data/test/tc_model_enum.rb +47 -0
- data/test/tc_model_inputs.rb +47 -0
- metadata +9 -7
- data/ext/slow_blink/message/ext_compact_encoder/blink_compact.c +0 -642
- data/ext/slow_blink/message/ext_compact_encoder/blink_compact.h +0 -411
- data/ext/slow_blink/message/ext_compact_encoder/blink_debug.h +0 -46
- data/ext/slow_blink/message/ext_compact_encoder/blink_stream.c +0 -314
- data/ext/slow_blink/message/ext_compact_encoder/blink_stream.h +0 -185
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c5455bc952a75dc80f05313682d5346fe76410a5
|
4
|
+
data.tar.gz: f8f43a1ed8bb7ee180573a4e526331ab20b051ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f60e3a127aba57bd69a3d9ce5f899a9bb7915ca4aee4b4114f03d559ce9555f21ef9d4bc4470b1a0abdb058c77b1f92d742c145c880a0a2729ac53dee975b51d
|
7
|
+
data.tar.gz: ca0fa723aaf930665aa8851831702b3b0fd13b27193f69374966181200159f640e3d61b31f6feb39a33a616ab7a2851c5c605a1331093431d3611290ac74fe1f
|
@@ -3479,21 +3479,19 @@ YY_RULE_SETUP
|
|
3479
3479
|
#line 80 "etc/slow_blink/ext_schema_parser/parser.l"
|
3480
3480
|
{ *yylval = rb_str_new(&yytext[1], yyleng-1); return TOK_ESCAPED_NC_NAME; }
|
3481
3481
|
YY_BREAK
|
3482
|
-
case YY_STATE_EOF(INITIAL):
|
3483
|
-
#line 82 "etc/slow_blink/ext_schema_parser/parser.l"
|
3484
|
-
{ return TOK_EOF; }
|
3485
|
-
YY_BREAK
|
3486
3482
|
case 50:
|
3487
3483
|
YY_RULE_SETUP
|
3488
|
-
#line
|
3484
|
+
#line 82 "etc/slow_blink/ext_schema_parser/parser.l"
|
3489
3485
|
{ return TOK_UNKNOWN; }
|
3490
3486
|
YY_BREAK
|
3491
3487
|
case 51:
|
3492
3488
|
YY_RULE_SETUP
|
3493
|
-
#line
|
3489
|
+
#line 84 "etc/slow_blink/ext_schema_parser/parser.l"
|
3494
3490
|
ECHO;
|
3495
3491
|
YY_BREAK
|
3496
|
-
#line
|
3492
|
+
#line 3493 "ext/slow_blink/ext_schema_parser/lexer.c"
|
3493
|
+
case YY_STATE_EOF(INITIAL):
|
3494
|
+
yyterminate();
|
3497
3495
|
|
3498
3496
|
case YY_END_OF_BUFFER:
|
3499
3497
|
{
|
@@ -4640,7 +4638,7 @@ void yyfree (void * ptr , yyscan_t yyscanner)
|
|
4640
4638
|
|
4641
4639
|
#define YYTABLES_NAME "yytables"
|
4642
4640
|
|
4643
|
-
#line
|
4641
|
+
#line 84 "etc/slow_blink/ext_schema_parser/parser.l"
|
4644
4642
|
|
4645
4643
|
|
4646
4644
|
|
@@ -1275,7 +1275,7 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
|
|
1275
1275
|
#line 251 "etc/slow_blink/ext_schema_parser/parser.y" /* glr.c:816 */
|
1276
1276
|
{
|
1277
1277
|
((*yyvalp)) = rb_hash_new();
|
1278
|
-
rb_hash_aset(((*yyvalp)), ID2SYM(rb_intern("class")), ID2SYM(rb_intern("
|
1278
|
+
rb_hash_aset(((*yyvalp)), ID2SYM(rb_intern("class")), ID2SYM(rb_intern("BOOLEAN")));
|
1279
1279
|
rb_hash_aset(((*yyvalp)), ID2SYM(rb_intern("loc")), newLocation(filename, &(*yylocp)));
|
1280
1280
|
}
|
1281
1281
|
#line 1282 "ext/slow_blink/ext_schema_parser/parser.c" /* glr.c:816 */
|
@@ -3756,6 +3756,8 @@ static VALUE parseFileBuffer(int argc, VALUE* argv, VALUE self)
|
|
3756
3756
|
|
3757
3757
|
filename = rb_hash_aref(opts, ID2SYM(rb_intern("filename")));
|
3758
3758
|
|
3759
|
+
rb_gc_mark(filename);
|
3760
|
+
|
3759
3761
|
if(yylex_init(&scanner) == 0){
|
3760
3762
|
|
3761
3763
|
if(yy_scan_bytes((const char *)RSTRING_PTR(buffer), RSTRING_LEN(buffer), scanner)){
|
@@ -82,9 +82,14 @@ static VALUE cWeakError4;
|
|
82
82
|
static VALUE cWeakError9;
|
83
83
|
static VALUE cWeakError11;
|
84
84
|
|
85
|
-
static struct blink_stream_user cUserStream = {
|
85
|
+
static const struct blink_stream_user cUserStream = {
|
86
86
|
.read = myRead,
|
87
|
-
.write = myWrite
|
87
|
+
.write = myWrite,
|
88
|
+
.tell = NULL,
|
89
|
+
.peek = NULL,
|
90
|
+
.seekCur = NULL,
|
91
|
+
.seekSet = NULL,
|
92
|
+
.eof = NULL
|
88
93
|
};
|
89
94
|
|
90
95
|
/* functions **********************************************************/
|
@@ -147,13 +152,15 @@ void Init_ext_compact_encoder(void)
|
|
147
152
|
|
148
153
|
/* static functions ***************************************************/
|
149
154
|
|
155
|
+
#include <assert.h>
|
156
|
+
|
150
157
|
static bool myRead(void *state, void *buf, size_t nbyte)
|
151
158
|
{
|
152
159
|
bool retval = false;
|
153
|
-
VALUE stringIO = *(VALUE *)state;
|
154
160
|
|
161
|
+
VALUE stringIO = *(VALUE *)state;
|
155
162
|
VALUE out = rb_funcall(stringIO, rb_intern("read"), 1, SIZET2NUM(nbyte));
|
156
|
-
|
163
|
+
|
157
164
|
if((size_t)RSTRING_LEN(out) == nbyte){
|
158
165
|
|
159
166
|
(void)memcpy(buf, RSTRING_PTR(out), (size_t)RSTRING_LEN(out));
|
@@ -182,6 +189,7 @@ static VALUE putU8(VALUE self, VALUE val)
|
|
182
189
|
if(NUM2ULL(val) <= UINT8_MAX){
|
183
190
|
|
184
191
|
struct blink_stream stream;
|
192
|
+
|
185
193
|
(void)BLINK_Stream_initUser(&stream, &self, cUserStream);
|
186
194
|
(void)BLINK_Compact_encodeU8((uint8_t)NUM2ULL(val), &stream);
|
187
195
|
}
|
@@ -203,6 +211,7 @@ static VALUE putU16(VALUE self, VALUE val)
|
|
203
211
|
if(NUM2ULL(val) <= UINT16_MAX){
|
204
212
|
|
205
213
|
struct blink_stream stream;
|
214
|
+
|
206
215
|
(void)BLINK_Stream_initUser(&stream, &self, cUserStream);
|
207
216
|
(void)BLINK_Compact_encodeU16((uint16_t)NUM2ULL(val), &stream);
|
208
217
|
}
|
@@ -224,6 +233,7 @@ static VALUE putU32(VALUE self, VALUE val)
|
|
224
233
|
if(NUM2ULL(val) <= UINT32_MAX){
|
225
234
|
|
226
235
|
struct blink_stream stream;
|
236
|
+
|
227
237
|
(void)BLINK_Stream_initUser(&stream, &self, cUserStream);
|
228
238
|
(void)BLINK_Compact_encodeU32((uint32_t)NUM2ULL(val), &stream);
|
229
239
|
}
|
@@ -242,16 +252,11 @@ static VALUE putU64(VALUE self, VALUE val)
|
|
242
252
|
(void)putNull(self);
|
243
253
|
}
|
244
254
|
else{
|
245
|
-
if(NUM2ULL(val) <= UINT64_MAX){
|
246
|
-
|
247
|
-
struct blink_stream stream;
|
248
|
-
(void)BLINK_Stream_initUser(&stream, &self, cUserStream);
|
249
|
-
(void)BLINK_Compact_encodeU64(NUM2ULL(val), &stream);
|
250
|
-
}
|
251
|
-
else{
|
252
255
|
|
253
|
-
|
254
|
-
|
256
|
+
struct blink_stream stream;
|
257
|
+
|
258
|
+
(void)BLINK_Stream_initUser(&stream, &self, cUserStream);
|
259
|
+
(void)BLINK_Compact_encodeU64(NUM2ULL(val), &stream);
|
255
260
|
}
|
256
261
|
|
257
262
|
return self;
|
@@ -266,6 +271,7 @@ static VALUE putI8(VALUE self, VALUE val)
|
|
266
271
|
if((NUM2LL(val) >= INT8_MIN) && (NUM2LL(val) <= INT8_MAX)){
|
267
272
|
|
268
273
|
struct blink_stream stream;
|
274
|
+
|
269
275
|
(void)BLINK_Stream_initUser(&stream, &self, cUserStream);
|
270
276
|
(void)BLINK_Compact_encodeI8((int8_t)NUM2LL(val), &stream);
|
271
277
|
}
|
@@ -287,6 +293,7 @@ static VALUE putI16(VALUE self, VALUE val)
|
|
287
293
|
if((NUM2LL(val) >= INT16_MIN) && (NUM2LL(val) <= INT16_MAX)){
|
288
294
|
|
289
295
|
struct blink_stream stream;
|
296
|
+
|
290
297
|
(void)BLINK_Stream_initUser(&stream, &self, cUserStream);
|
291
298
|
(void)BLINK_Compact_encodeI16((int16_t)NUM2LL(val), &stream);
|
292
299
|
}
|
@@ -308,6 +315,7 @@ static VALUE putI32(VALUE self, VALUE val)
|
|
308
315
|
if((NUM2LL(val) >= INT32_MIN) && (NUM2LL(val) <= INT32_MAX)){
|
309
316
|
|
310
317
|
struct blink_stream stream;
|
318
|
+
|
311
319
|
(void)BLINK_Stream_initUser(&stream, &self, cUserStream);
|
312
320
|
(void)BLINK_Compact_encodeI32((int32_t)NUM2LL(val), &stream);
|
313
321
|
}
|
@@ -326,16 +334,10 @@ static VALUE putI64(VALUE self, VALUE val)
|
|
326
334
|
}
|
327
335
|
else{
|
328
336
|
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
(void)BLINK_Compact_encodeI64(NUM2LL(val), &stream);
|
334
|
-
}
|
335
|
-
else{
|
336
|
-
|
337
|
-
rb_raise(rb_eRangeError, "Input exceeds allowable range of type");
|
338
|
-
}
|
337
|
+
struct blink_stream stream;
|
338
|
+
|
339
|
+
(void)BLINK_Stream_initUser(&stream, &self, cUserStream);
|
340
|
+
(void)BLINK_Compact_encodeI64(NUM2LL(val), &stream);
|
339
341
|
}
|
340
342
|
return self;
|
341
343
|
}
|
@@ -348,6 +350,7 @@ static VALUE putF64(VALUE self, VALUE val)
|
|
348
350
|
else{
|
349
351
|
|
350
352
|
struct blink_stream stream;
|
353
|
+
|
351
354
|
(void)BLINK_Stream_initUser(&stream, &self, cUserStream);
|
352
355
|
(void)BLINK_Compact_encodeF64(NUM2DBL(val), &stream);
|
353
356
|
}
|
@@ -363,8 +366,9 @@ static VALUE putBool(VALUE self, VALUE val)
|
|
363
366
|
else{
|
364
367
|
|
365
368
|
struct blink_stream stream;
|
369
|
+
|
366
370
|
(void)BLINK_Stream_initUser(&stream, &self, cUserStream);
|
367
|
-
(void)BLINK_Compact_encodeBool((val == Qfalse) ? false : true, &stream);
|
371
|
+
(void)BLINK_Compact_encodeBool(((val == Qfalse) ? false : true), &stream);
|
368
372
|
}
|
369
373
|
return self;
|
370
374
|
}
|
@@ -372,6 +376,7 @@ static VALUE putBool(VALUE self, VALUE val)
|
|
372
376
|
static VALUE putNull(VALUE self)
|
373
377
|
{
|
374
378
|
struct blink_stream stream;
|
379
|
+
|
375
380
|
(void)BLINK_Stream_initUser(&stream, &self, cUserStream);
|
376
381
|
(void)BLINK_Compact_encodeNull(&stream);
|
377
382
|
return self;
|
@@ -380,6 +385,7 @@ static VALUE putNull(VALUE self)
|
|
380
385
|
static VALUE putPresent(VALUE self)
|
381
386
|
{
|
382
387
|
struct blink_stream stream;
|
388
|
+
|
383
389
|
(void)BLINK_Stream_initUser(&stream, &self, cUserStream);
|
384
390
|
(void)BLINK_Compact_encodePresent(&stream);
|
385
391
|
return self;
|
@@ -389,6 +395,7 @@ static VALUE putBinary(VALUE self, VALUE val)
|
|
389
395
|
{
|
390
396
|
VALUE retval = Qnil;
|
391
397
|
struct blink_stream stream;
|
398
|
+
|
392
399
|
(void)BLINK_Stream_initUser(&stream, &self, cUserStream);
|
393
400
|
|
394
401
|
if(val == Qnil){
|
@@ -428,6 +435,7 @@ static VALUE getU8(VALUE self)
|
|
428
435
|
uint8_t val;
|
429
436
|
bool isNull;
|
430
437
|
struct blink_stream stream;
|
438
|
+
|
431
439
|
(void)BLINK_Stream_initUser(&stream, &self, cUserStream);
|
432
440
|
if(BLINK_Compact_decodeU8(&stream, &val, &isNull)){
|
433
441
|
|
@@ -447,6 +455,7 @@ static VALUE getU16(VALUE self)
|
|
447
455
|
uint16_t val;
|
448
456
|
bool isNull;
|
449
457
|
struct blink_stream stream;
|
458
|
+
|
450
459
|
(void)BLINK_Stream_initUser(&stream, &self, cUserStream);
|
451
460
|
if(BLINK_Compact_decodeU16(&stream, &val, &isNull)){
|
452
461
|
|
@@ -465,6 +474,7 @@ static VALUE getU32(VALUE self)
|
|
465
474
|
VALUE retval = Qnil;
|
466
475
|
uint32_t val;
|
467
476
|
bool isNull;
|
477
|
+
rb_gc_mark(self);
|
468
478
|
struct blink_stream stream;
|
469
479
|
(void)BLINK_Stream_initUser(&stream, &self, cUserStream);
|
470
480
|
if(BLINK_Compact_decodeU32(&stream, &val, &isNull)){
|
@@ -485,6 +495,7 @@ static VALUE getU64(VALUE self)
|
|
485
495
|
uint64_t val;
|
486
496
|
bool isNull;
|
487
497
|
struct blink_stream stream;
|
498
|
+
|
488
499
|
(void)BLINK_Stream_initUser(&stream, &self, cUserStream);
|
489
500
|
if(BLINK_Compact_decodeU64(&stream, &val, &isNull)){
|
490
501
|
|
@@ -504,6 +515,7 @@ static VALUE getI8(VALUE self)
|
|
504
515
|
int8_t val;
|
505
516
|
bool isNull;
|
506
517
|
struct blink_stream stream;
|
518
|
+
|
507
519
|
(void)BLINK_Stream_initUser(&stream, &self, cUserStream);
|
508
520
|
if(BLINK_Compact_decodeI8(&stream, &val, &isNull)){
|
509
521
|
|
@@ -523,6 +535,7 @@ static VALUE getI16(VALUE self)
|
|
523
535
|
int16_t val;
|
524
536
|
bool isNull;
|
525
537
|
struct blink_stream stream;
|
538
|
+
|
526
539
|
(void)BLINK_Stream_initUser(&stream, &self, cUserStream);
|
527
540
|
if(BLINK_Compact_decodeI16(&stream, &val, &isNull)){
|
528
541
|
|
@@ -542,6 +555,7 @@ static VALUE getI32(VALUE self)
|
|
542
555
|
int32_t val;
|
543
556
|
bool isNull;
|
544
557
|
struct blink_stream stream;
|
558
|
+
|
545
559
|
(void)BLINK_Stream_initUser(&stream, &self, cUserStream);
|
546
560
|
if(BLINK_Compact_decodeI32(&stream, &val, &isNull)){
|
547
561
|
|
@@ -561,6 +575,7 @@ static VALUE getI64(VALUE self)
|
|
561
575
|
int64_t val;
|
562
576
|
bool isNull;
|
563
577
|
struct blink_stream stream;
|
578
|
+
|
564
579
|
(void)BLINK_Stream_initUser(&stream, &self, cUserStream);
|
565
580
|
if(BLINK_Compact_decodeI64(&stream, &val, &isNull)){
|
566
581
|
|
@@ -580,6 +595,7 @@ static VALUE getF64(VALUE self)
|
|
580
595
|
double val;
|
581
596
|
bool isNull;
|
582
597
|
struct blink_stream stream;
|
598
|
+
|
583
599
|
(void)BLINK_Stream_initUser(&stream, &self, cUserStream);
|
584
600
|
if(BLINK_Compact_decodeF64(&stream, &val, &isNull)){
|
585
601
|
|
@@ -598,6 +614,7 @@ static VALUE getPresent(VALUE self)
|
|
598
614
|
VALUE retval = Qnil;
|
599
615
|
bool val;
|
600
616
|
struct blink_stream stream;
|
617
|
+
|
601
618
|
(void)BLINK_Stream_initUser(&stream, &self, cUserStream);
|
602
619
|
if(BLINK_Compact_decodePresent(&stream, &val)){
|
603
620
|
|
@@ -617,6 +634,8 @@ static VALUE getBool(VALUE self)
|
|
617
634
|
bool val;
|
618
635
|
bool isNull;
|
619
636
|
struct blink_stream stream;
|
637
|
+
rb_gc_mark(self);
|
638
|
+
|
620
639
|
(void)BLINK_Stream_initUser(&stream, &self, cUserStream);
|
621
640
|
if(BLINK_Compact_decodeBool(&stream, &val, &isNull)){
|
622
641
|
|
@@ -636,6 +655,8 @@ static VALUE getBinary(VALUE self)
|
|
636
655
|
uint32_t size;
|
637
656
|
bool isNull;
|
638
657
|
struct blink_stream stream;
|
658
|
+
rb_gc_mark(self);
|
659
|
+
|
639
660
|
(void)BLINK_Stream_initUser(&stream, &self, cUserStream);
|
640
661
|
|
641
662
|
if(BLINK_Compact_decodeU32(&stream, &size, &isNull)){
|
@@ -643,6 +664,7 @@ static VALUE getBinary(VALUE self)
|
|
643
664
|
if(!isNull){
|
644
665
|
|
645
666
|
retval = rb_funcall(self, rb_intern("read"), 1, UINT2NUM(size));
|
667
|
+
rb_gc_mark(retval);
|
646
668
|
|
647
669
|
if((retval == Qnil) || ((uint32_t)NUM2UINT(rb_funcall(retval, rb_intern("size"), 0)) != size)){
|
648
670
|
|
@@ -1,4 +1,11 @@
|
|
1
1
|
require 'mkmf'
|
2
|
-
|
3
|
-
|
2
|
+
|
3
|
+
$srcs = ['ext_compact_encoder.c', 'blink_stream.c', 'blink_compact.c']
|
4
|
+
$VPATH << "../../../../ext/slow_blink/message/ext_compact_encoder"
|
5
|
+
$INCFLAGS << " -I$(srcdir)/../include"
|
6
|
+
$defs << " -DBLINK_DEBUG_INCLUDE=#include <ruby.h>"
|
7
|
+
$defs << " -D'BLINK_ERROR(...)=rb_funcall(rb_stderr, rb_intern(\\\"puts\\\"), 1, rb_str_new2(__VA_ARGS__));'"
|
8
|
+
$defs << " -D'BLINK_DEBUG(...)=rb_funcall(rb_stderr, rb_intern(\\\"puts\\\"), 1, rb_str_new2(__VA_ARGS__));'"
|
9
|
+
|
10
|
+
create_makefile('slow_blink/message/ext_compact_encoder', "../../../../assets/ublink/src")
|
4
11
|
|
data/lib/slow_blink/enum.rb
CHANGED
@@ -38,7 +38,8 @@ module SlowBlink
|
|
38
38
|
# @private
|
39
39
|
def initialize(attr)
|
40
40
|
|
41
|
-
|
41
|
+
super(attr)
|
42
|
+
|
42
43
|
@symbols = {}
|
43
44
|
@name = attr[:name].dup.freeze
|
44
45
|
|
@@ -90,10 +91,12 @@ module SlowBlink
|
|
90
91
|
if (result = @symbols[nameOrVal]).nil?
|
91
92
|
raise RangeError
|
92
93
|
end
|
94
|
+
result
|
93
95
|
else
|
94
96
|
if (result = @symbols.values.detect{|s|s.value == nameOrVal.to_i}).nil?
|
95
97
|
raise RangeError
|
96
98
|
end
|
99
|
+
result
|
97
100
|
end
|
98
101
|
end
|
99
102
|
|
data/lib/slow_blink/field.rb
CHANGED
@@ -93,7 +93,7 @@ module SlowBlink
|
|
93
93
|
def initialize(attr)
|
94
94
|
@name = attr[:name][:name].freeze
|
95
95
|
@id = attr[:name][:id]
|
96
|
-
@optional = attr[:
|
96
|
+
@optional = (attr[:optional] ? true : false)
|
97
97
|
@location = attr[:location].freeze
|
98
98
|
@type = SlowBlink.const_get(attr[:type][:class]).new(attr[:type].merge({:table => attr[:table], :ns => attr[:ns]}))
|
99
99
|
@table = attr[:table]
|
@@ -14,17 +14,57 @@ module SlowBlink
|
|
14
14
|
@options = {}
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
18
|
-
header = put("groups.h.erb")
|
19
|
-
source = put("groups.c.erb")
|
17
|
+
def generate(prefix)
|
20
18
|
|
21
|
-
|
22
|
-
File.
|
23
|
-
|
19
|
+
`mkdir -p #{prefix}`
|
20
|
+
`rm -fr #{File.join(prefix, "*")}`
|
21
|
+
|
22
|
+
header = run_erb("include/groups.h.erb")
|
23
|
+
source = run_erb("src/groups.c.erb")
|
24
|
+
|
25
|
+
tc_new = run_erb("test/tc_new.c.erb")
|
26
|
+
tc_decodecompact = run_erb("test/tc_decodecompact.c.erb")
|
27
|
+
|
28
|
+
testMake = run_erb("test/makefile.erb")
|
29
|
+
|
30
|
+
`mkdir #{File.join(prefix, "src")}`
|
31
|
+
`mkdir #{File.join(prefix, "include")}`
|
32
|
+
`mkdir #{File.join(prefix, "test")}`
|
33
|
+
`mkdir #{File.join(prefix, "test", "build")}`
|
34
|
+
`mkdir #{File.join(prefix, "test", "bin")}`
|
35
|
+
`mkdir #{File.join(prefix, "vendor")}`
|
36
|
+
`mkdir #{File.join(prefix, "vendor", "cmocka")}`
|
37
|
+
|
38
|
+
assetsDir = File.expand_path(File.join(File.dirname(__FILE__), "../../../assets"))
|
39
|
+
|
40
|
+
`cp #{assetsDir}/ublink/src/blink_stream.c #{prefix}/src`
|
41
|
+
`cp #{assetsDir}/ublink/src/blink_compact.c #{prefix}/src`
|
42
|
+
|
43
|
+
`cp #{assetsDir}/ublink/include/blink_stream.h #{prefix}/include`
|
44
|
+
`cp #{assetsDir}/ublink/include/blink_compact.h #{prefix}/include`
|
45
|
+
|
46
|
+
`cp #{assetsDir}/ublink/include/blink_debug.h #{prefix}/include`
|
47
|
+
|
48
|
+
`cp -r #{assetsDir}/cmocka/src #{prefix}/vendor/cmocka/`
|
49
|
+
`cp -r #{assetsDir}/cmocka/include #{prefix}/vendor/cmocka/`
|
50
|
+
`cp #{assetsDir}/cmocka/COPYING #{prefix}/vendor/cmocka/`
|
51
|
+
|
52
|
+
|
53
|
+
File.open("#{prefix}/include/groups.h", "w"){|f|f.write(header)}
|
54
|
+
File.open("#{prefix}/src/groups.c", "w"){|f|f.write(source)}
|
55
|
+
|
56
|
+
File.open("#{prefix}/test/tc_new.c", "w"){|f|f.write(tc_new)}
|
57
|
+
File.open("#{prefix}/test/tc_decodecompact.c", "w"){|f|f.write(tc_decodecompact)}
|
58
|
+
|
59
|
+
File.open("#{prefix}/test/makefile", "w"){|f|f.write(testMake)}
|
60
|
+
|
61
|
+
puts `cd #{prefix}/test && make`
|
62
|
+
|
63
|
+
end
|
24
64
|
|
25
65
|
private
|
26
66
|
|
27
|
-
def
|
67
|
+
def run_erb(filename)
|
28
68
|
f = File.read(File.expand_path(File.join(File.dirname(__FILE__), filename)))
|
29
69
|
erb = ERB.new(f, nil, "<>-")
|
30
70
|
erb.filename = filename
|
@@ -39,13 +79,82 @@ module SlowBlink
|
|
39
79
|
"_#{f.name}"
|
40
80
|
end
|
41
81
|
|
82
|
+
def fvalue(f)
|
83
|
+
if f.type.sequence?
|
84
|
+
"#{fname(f)}.tail->value"
|
85
|
+
else
|
86
|
+
"#{fname(f)}.value"
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def testSignature(g, f)
|
91
|
+
"bool #{gname(g)}_test_#{f.name}(group_t group)"
|
92
|
+
end
|
93
|
+
|
94
|
+
def clearSignature(g, f)
|
95
|
+
"void #{gname(g)}_clear_#{f.name}(group_t group)"
|
96
|
+
end
|
97
|
+
|
98
|
+
def setSignature(g, f)
|
99
|
+
out = "bool #{}_#{gname(g)}_set_#{f.name}(group_t group, "
|
100
|
+
case f.type.class
|
101
|
+
when STRING
|
102
|
+
out << "const char *data, uint32_t len"
|
103
|
+
when BINARY, FIXED
|
104
|
+
out << "const uint8_t *data, uint32_t len"
|
105
|
+
when DECIMAL
|
106
|
+
out << "int64_t mantissa, int8_t exponent"
|
107
|
+
when ENUM
|
108
|
+
out << "const char *value"
|
109
|
+
else
|
110
|
+
out << "#{value_type(f.type)} value"
|
111
|
+
end
|
112
|
+
out << ")"
|
113
|
+
end
|
114
|
+
|
115
|
+
def getSignature(g, f)
|
116
|
+
out = ""
|
117
|
+
case f.type.class
|
118
|
+
when STRING, BINARY, FIXED, DECIMAL
|
119
|
+
out << "void"
|
120
|
+
when ENUM
|
121
|
+
out << "const char *"
|
122
|
+
else
|
123
|
+
out << value_type(f.type)
|
124
|
+
end
|
125
|
+
out << " #{gname(g)}_get_#{f.name}(group_t group"
|
126
|
+
case f.type.class
|
127
|
+
when STRING
|
128
|
+
out << ", const char **data, uint32_t *len"
|
129
|
+
when BINARY, FIXED
|
130
|
+
out << ", const uint8_t **data, uint32_t *len"
|
131
|
+
when DECIMAL
|
132
|
+
out << ", int64_t *mantissa, int8_t *exponent"
|
133
|
+
end
|
134
|
+
out << ")"
|
135
|
+
end
|
136
|
+
|
137
|
+
def appendSignature(g,f)
|
138
|
+
setSignature(g,f).sub("_get_","_append_")
|
139
|
+
end
|
140
|
+
|
141
|
+
def getResult(f)
|
142
|
+
out = ""
|
143
|
+
case f.type.class
|
144
|
+
when STRING, BINARY, FIXED, DECIMAL
|
145
|
+
out << "void"
|
146
|
+
else
|
147
|
+
out << value_type(f.type)
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
42
151
|
def value_type(type)
|
43
152
|
|
44
153
|
out = ""
|
45
154
|
|
46
155
|
case type.class
|
47
156
|
when BINARY, STRING, FIXED
|
48
|
-
out << "struct
|
157
|
+
out << "struct string"
|
49
158
|
when U8
|
50
159
|
out << "uint8_t"
|
51
160
|
when U16
|
@@ -58,16 +167,14 @@ module SlowBlink
|
|
58
167
|
out << "int8_t"
|
59
168
|
when I16
|
60
169
|
out << "int16_t"
|
61
|
-
when I32
|
170
|
+
when I32, ENUM
|
62
171
|
out << "int32_t"
|
63
172
|
when I64
|
64
173
|
out << "int64_t"
|
65
|
-
when ENUM
|
66
|
-
out << "const char *"
|
67
174
|
when FLOATING_POINT
|
68
175
|
out << "double"
|
69
176
|
when DECIMAL
|
70
|
-
out << "struct
|
177
|
+
out << "struct decimal"
|
71
178
|
when BOOLEAN
|
72
179
|
out << "bool"
|
73
180
|
when StaticGroup
|
@@ -24,8 +24,12 @@ module SlowBlink::Message
|
|
24
24
|
# @abstract
|
25
25
|
class BINARY
|
26
26
|
|
27
|
+
def self.type
|
28
|
+
@type
|
29
|
+
end
|
30
|
+
|
27
31
|
# @private
|
28
|
-
def self.from_compact(input,
|
32
|
+
def self.from_compact(input, depth)
|
29
33
|
if value = input.getBinary
|
30
34
|
if !@size or value.size <= @size
|
31
35
|
self.new(value)
|
@@ -73,6 +77,10 @@ module SlowBlink::Message
|
|
73
77
|
out.putBinary(@value)
|
74
78
|
end
|
75
79
|
|
80
|
+
def to_tag
|
81
|
+
@value.bytes.map{ |c| sprintf("\\x%02X",c) }.join
|
82
|
+
end
|
83
|
+
|
76
84
|
end
|
77
85
|
|
78
86
|
end
|
@@ -24,9 +24,14 @@ module SlowBlink::Message
|
|
24
24
|
# @abstract
|
25
25
|
class BOOLEAN
|
26
26
|
|
27
|
+
def self.type
|
28
|
+
@type
|
29
|
+
end
|
30
|
+
|
27
31
|
# @private
|
28
|
-
def self.from_compact(input,
|
29
|
-
|
32
|
+
def self.from_compact(input, depth)
|
33
|
+
value = input.getBool
|
34
|
+
if !value.nil?
|
30
35
|
self.new(value)
|
31
36
|
else
|
32
37
|
nil
|
@@ -51,13 +56,17 @@ module SlowBlink::Message
|
|
51
56
|
|
52
57
|
# @note calls {#set}(value)
|
53
58
|
def initialize(value)
|
54
|
-
set(value)
|
59
|
+
set(value)
|
55
60
|
end
|
56
61
|
|
57
62
|
# @private
|
58
63
|
def to_compact(out)
|
59
64
|
out.putBool(@value)
|
60
65
|
end
|
66
|
+
|
67
|
+
def to_tag
|
68
|
+
( @value ? "Y" : "N" )
|
69
|
+
end
|
61
70
|
|
62
71
|
end
|
63
72
|
|
@@ -24,8 +24,12 @@ module SlowBlink::Message
|
|
24
24
|
# @abstract
|
25
25
|
class DATE
|
26
26
|
|
27
|
+
def self.type
|
28
|
+
@type
|
29
|
+
end
|
30
|
+
|
27
31
|
# @private
|
28
|
-
def self.from_compact(input,
|
32
|
+
def self.from_compact(input, depth)
|
29
33
|
if value = input.getI32
|
30
34
|
self.new(value)
|
31
35
|
else
|
@@ -49,6 +53,10 @@ module SlowBlink::Message
|
|
49
53
|
def to_compact(out)
|
50
54
|
out.putI32(@value.strftime('%Q'))
|
51
55
|
end
|
56
|
+
|
57
|
+
def to_tag
|
58
|
+
@value.to_s
|
59
|
+
end
|
52
60
|
|
53
61
|
end
|
54
62
|
|
@@ -26,8 +26,12 @@ module SlowBlink::Message
|
|
26
26
|
# @abstract
|
27
27
|
class DECIMAL
|
28
28
|
|
29
|
+
def self.type
|
30
|
+
@type
|
31
|
+
end
|
32
|
+
|
29
33
|
# @private
|
30
|
-
def self.from_compact(input,
|
34
|
+
def self.from_compact(input, depth)
|
31
35
|
if e = input.getI8
|
32
36
|
if m = input.getI64
|
33
37
|
self.new("#{m}E#{e}")
|
@@ -68,6 +72,10 @@ module SlowBlink::Message
|
|
68
72
|
out.putI64(mantissa)
|
69
73
|
|
70
74
|
end
|
75
|
+
|
76
|
+
def to_tag
|
77
|
+
@value.to_s
|
78
|
+
end
|
71
79
|
|
72
80
|
end
|
73
81
|
|