slow_blink 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/slow_blink/ext_compact_encoder/compact_encoder.c +258 -0
- data/ext/slow_blink/ext_compact_encoder/compact_encoder.h +92 -0
- data/ext/slow_blink/ext_compact_encoder/ext_compact_encoder.c +555 -0
- data/ext/slow_blink/ext_compact_encoder/extconf.rb +4 -0
- data/ext/slow_blink/ext_schema_parser/lexer.c +59 -59
- data/ext/slow_blink/ext_schema_parser/lexer.h +2 -2
- data/ext/slow_blink/ext_schema_parser/parser.c +380 -367
- data/ext/slow_blink/ext_schema_parser/parser.h +1 -1
- data/lib/slow_blink/annotatable.rb +1 -1
- data/lib/slow_blink/annotation.rb +5 -5
- data/lib/slow_blink/binary.rb +26 -0
- data/lib/slow_blink/boolean.rb +26 -0
- data/lib/slow_blink/compact_encoder.rb +45 -71
- data/lib/slow_blink/date.rb +25 -0
- data/lib/slow_blink/decimal.rb +26 -0
- data/lib/slow_blink/definition.rb +19 -10
- data/lib/slow_blink/enumeration.rb +14 -36
- data/lib/slow_blink/error.rb +19 -0
- data/lib/slow_blink/field.rb +3 -16
- data/lib/slow_blink/fixed.rb +26 -0
- data/lib/slow_blink/floating_point.rb +27 -0
- data/lib/slow_blink/group.rb +30 -43
- data/lib/slow_blink/incremental_annotation.rb +75 -21
- data/lib/slow_blink/integer.rb +65 -0
- data/lib/slow_blink/message/binary.rb +87 -0
- data/lib/slow_blink/message/boolean.rb +68 -0
- data/lib/slow_blink/message/date.rb +33 -0
- data/lib/slow_blink/message/decimal.rb +25 -0
- data/lib/slow_blink/message/enumeration.rb +69 -0
- data/lib/slow_blink/message/field.rb +73 -0
- data/lib/slow_blink/message/fixed.rb +84 -0
- data/lib/slow_blink/message/floating_point.rb +68 -0
- data/lib/slow_blink/message/group.rb +260 -0
- data/lib/slow_blink/message/integer.rb +217 -0
- data/lib/slow_blink/message/model.rb +202 -0
- data/lib/slow_blink/message/sequence.rb +85 -0
- data/lib/slow_blink/message/string.rb +95 -0
- data/lib/slow_blink/message/time.rb +78 -0
- data/lib/slow_blink/message/time_of_day.rb +132 -0
- data/lib/slow_blink/name_with_id.rb +2 -1
- data/lib/slow_blink/namespace.rb +140 -0
- data/lib/slow_blink/object.rb +29 -0
- data/lib/slow_blink/ref.rb +93 -0
- data/lib/slow_blink/schema.rb +94 -68
- data/lib/slow_blink/{component_reference.rb → schema_buffer.rb} +11 -22
- data/lib/slow_blink/sequence.rb +58 -0
- data/lib/slow_blink/string.rb +40 -0
- data/lib/slow_blink/sym.rb +4 -0
- data/lib/slow_blink/time.rb +30 -0
- data/lib/slow_blink/time_of_day.rb +30 -0
- data/lib/slow_blink/type.rb +7 -402
- data/lib/slow_blink/version.rb +1 -1
- data/lib/slow_blink.rb +1 -0
- data/rakefile +14 -3
- data/test/{integration/capture_stderr.rb → capture_stderr.rb} +0 -0
- data/test/tc_compact_encoder.rb +341 -0
- data/test/tc_field.rb +53 -0
- data/test/tc_group.rb +122 -0
- data/test/tc_incr_annote.rb +27 -0
- data/test/{integration/tc_inputs.rb → tc_inputs.rb} +7 -11
- data/test/tc_model.rb +65 -0
- data/test/tc_model_encode.rb +63 -0
- data/test/tc_namespace.rb +8 -0
- data/test/tc_types.rb +198 -0
- metadata +58 -11
- data/ext/slow_blink/ext_schema_parser/parser.l +0 -139
- data/ext/slow_blink/ext_schema_parser/parser.y +0 -932
- data/lib/slow_blink/message.rb +0 -43
@@ -0,0 +1,68 @@
|
|
1
|
+
# Copyright (c) 2016 Cameron Harper
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
4
|
+
# this software and associated documentation files (the "Software"), to deal in
|
5
|
+
# the Software without restriction, including without limitation the rights to
|
6
|
+
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
7
|
+
# the Software, and to permit persons to whom the Software is furnished to do so,
|
8
|
+
# subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in all
|
11
|
+
# copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
15
|
+
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
16
|
+
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
17
|
+
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
18
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
19
|
+
|
20
|
+
module SlowBlink::Message
|
21
|
+
|
22
|
+
module FLOATING_POINT
|
23
|
+
|
24
|
+
module CLASS
|
25
|
+
|
26
|
+
def from_compact!(input)
|
27
|
+
self.new(input.getF64!)
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
module INSTANCE
|
33
|
+
|
34
|
+
def set(value)
|
35
|
+
if value
|
36
|
+
if value.kind_of? Numeric
|
37
|
+
@value = value
|
38
|
+
else
|
39
|
+
raise "expecting float"
|
40
|
+
end
|
41
|
+
elsif self.class.opt?
|
42
|
+
@value = nil
|
43
|
+
else
|
44
|
+
raise Error.new "value unacceptable"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def get
|
49
|
+
@value
|
50
|
+
end
|
51
|
+
|
52
|
+
def initialize(value)
|
53
|
+
if value
|
54
|
+
set(value)
|
55
|
+
else
|
56
|
+
@value = nil
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def to_compact(out)
|
61
|
+
out.putF64(@value)
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
@@ -0,0 +1,260 @@
|
|
1
|
+
# Copyright (c) 2016 Cameron Harper
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
4
|
+
# this software and associated documentation files (the "Software"), to deal in
|
5
|
+
# the Software without restriction, including without limitation the rights to
|
6
|
+
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
7
|
+
# the Software, and to permit persons to whom the Software is furnished to do so,
|
8
|
+
# subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in all
|
11
|
+
# copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
15
|
+
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
16
|
+
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
17
|
+
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
18
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
19
|
+
|
20
|
+
module SlowBlink::Message
|
21
|
+
|
22
|
+
TYPE_KEY = "$type".freeze
|
23
|
+
|
24
|
+
module StaticGroup
|
25
|
+
|
26
|
+
module CLASS
|
27
|
+
|
28
|
+
def fields
|
29
|
+
@fields
|
30
|
+
end
|
31
|
+
|
32
|
+
def opt?
|
33
|
+
@opt
|
34
|
+
end
|
35
|
+
|
36
|
+
def id
|
37
|
+
@id
|
38
|
+
end
|
39
|
+
|
40
|
+
def name
|
41
|
+
@name
|
42
|
+
end
|
43
|
+
|
44
|
+
def from_compact!(input)
|
45
|
+
if @opt
|
46
|
+
if input.getPresent!
|
47
|
+
fields = {}
|
48
|
+
@fields.each do |f|
|
49
|
+
fields[f.name] = f.from_compact!(input)
|
50
|
+
end
|
51
|
+
self.new(fields)
|
52
|
+
else
|
53
|
+
self.new(nil)
|
54
|
+
end
|
55
|
+
else
|
56
|
+
fields = {}
|
57
|
+
@fields.each do |f|
|
58
|
+
fields[f.name] = f.from_compact!(input)
|
59
|
+
end
|
60
|
+
self.new(fields)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
module INSTANCE
|
67
|
+
|
68
|
+
def []=(name, value)
|
69
|
+
if @value[name]
|
70
|
+
@value[name].set(value)
|
71
|
+
else
|
72
|
+
raise "field #{name} is not defined in this group"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def [](name)
|
77
|
+
if @value[name]
|
78
|
+
@value[name].get
|
79
|
+
else
|
80
|
+
raise "field #{name} is not defined in this group"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def set(value)
|
85
|
+
if value
|
86
|
+
@value = {}
|
87
|
+
self.class.fields.each do |f|
|
88
|
+
@value[f.name] = value[f.name]
|
89
|
+
end
|
90
|
+
elsif self.class.opt?
|
91
|
+
@value = nil
|
92
|
+
else
|
93
|
+
raise "this group cannot be NULL"
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def get
|
98
|
+
@value
|
99
|
+
end
|
100
|
+
|
101
|
+
def initialize(fields)
|
102
|
+
if fields
|
103
|
+
set(fields)
|
104
|
+
else
|
105
|
+
@value = {}
|
106
|
+
self.class.fields.each do |f|
|
107
|
+
@value[f.name] = f.new(nil)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def fields
|
113
|
+
@value
|
114
|
+
end
|
115
|
+
|
116
|
+
def to_compact(out)
|
117
|
+
if @value
|
118
|
+
if self.class.opt?
|
119
|
+
out.putPresent
|
120
|
+
self.class.fields.each do |f|
|
121
|
+
@value[f.name].to_compact(out)
|
122
|
+
end
|
123
|
+
out
|
124
|
+
else
|
125
|
+
self.class.fields.each do |f|
|
126
|
+
@value[f.name].to_compact(out)
|
127
|
+
end
|
128
|
+
out
|
129
|
+
end
|
130
|
+
else
|
131
|
+
out.putPresent(false)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
138
|
+
|
139
|
+
module DynamicGroup
|
140
|
+
|
141
|
+
module CLASS
|
142
|
+
|
143
|
+
def groups
|
144
|
+
@groups
|
145
|
+
end
|
146
|
+
|
147
|
+
def permitted
|
148
|
+
@permitted
|
149
|
+
end
|
150
|
+
|
151
|
+
def opt?
|
152
|
+
@opt
|
153
|
+
end
|
154
|
+
|
155
|
+
def from_compact!(input)
|
156
|
+
buf = input.getBinary!
|
157
|
+
if buf.size > 0
|
158
|
+
id = buf.getU64!
|
159
|
+
group = @groups[id]
|
160
|
+
if group
|
161
|
+
if @permitted.include? group.id
|
162
|
+
self.new(group.from_compact!(buf))
|
163
|
+
else
|
164
|
+
raise Error.new "W15: Group is known but unexpected"
|
165
|
+
end
|
166
|
+
else
|
167
|
+
raise Error.new "W2: Group id #{group.id} is unknown"
|
168
|
+
end
|
169
|
+
else
|
170
|
+
if self == ModelInstance
|
171
|
+
raise Error.new "W1: Top level group cannot be null"
|
172
|
+
elsif @opt
|
173
|
+
self.new(nil)
|
174
|
+
else
|
175
|
+
raise Error.new "W5: Value cannot be null"
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
end
|
181
|
+
|
182
|
+
module INSTANCE
|
183
|
+
|
184
|
+
def []=(name, value)
|
185
|
+
if @value
|
186
|
+
@value[name] = value
|
187
|
+
else
|
188
|
+
raise "undefined dynamic group"
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
def [](name)
|
193
|
+
if @value
|
194
|
+
@value[name]
|
195
|
+
else
|
196
|
+
raise "undefined dynamic group"
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
def extension(&group)
|
201
|
+
# define extension
|
202
|
+
# this is an array of OBJECTs
|
203
|
+
# extension do
|
204
|
+
# group "name" do |g|
|
205
|
+
# g["field"] = "value"
|
206
|
+
# end
|
207
|
+
# group "name" do |g|
|
208
|
+
# g["field"] = "value"
|
209
|
+
# end
|
210
|
+
# ...
|
211
|
+
# end
|
212
|
+
#
|
213
|
+
raise
|
214
|
+
end
|
215
|
+
|
216
|
+
def set(value)
|
217
|
+
if value
|
218
|
+
if self.class.groups.values.include? value.class
|
219
|
+
if self.class.permitted.include? value.class.id
|
220
|
+
@value = value
|
221
|
+
else
|
222
|
+
raise "group is not a permitted group"
|
223
|
+
end
|
224
|
+
else
|
225
|
+
raise "value is not a group instance"
|
226
|
+
end
|
227
|
+
elsif self.class.opt?
|
228
|
+
@value = nil
|
229
|
+
else
|
230
|
+
raise
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
def get
|
235
|
+
@value
|
236
|
+
end
|
237
|
+
|
238
|
+
def initialize(value)
|
239
|
+
if value
|
240
|
+
set(value)
|
241
|
+
else
|
242
|
+
@value = nil
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
def to_compact(out="")
|
247
|
+
if @value
|
248
|
+
group = @value.to_compact("".putU64(@value.class.id))
|
249
|
+
out.putU32(group.size)
|
250
|
+
out << group
|
251
|
+
else
|
252
|
+
out.putU32(nil)
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
end
|
257
|
+
|
258
|
+
end
|
259
|
+
|
260
|
+
end
|
@@ -0,0 +1,217 @@
|
|
1
|
+
# Copyright (c) 2016 Cameron Harper
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
4
|
+
# this software and associated documentation files (the "Software"), to deal in
|
5
|
+
# the Software without restriction, including without limitation the rights to
|
6
|
+
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
7
|
+
# the Software, and to permit persons to whom the Software is furnished to do so,
|
8
|
+
# subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in all
|
11
|
+
# copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
15
|
+
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
16
|
+
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
17
|
+
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
18
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
19
|
+
|
20
|
+
module SlowBlink::Message
|
21
|
+
|
22
|
+
module INTEGER
|
23
|
+
|
24
|
+
module CLASS
|
25
|
+
|
26
|
+
def name
|
27
|
+
@name
|
28
|
+
end
|
29
|
+
|
30
|
+
def opt?
|
31
|
+
@opt
|
32
|
+
end
|
33
|
+
|
34
|
+
def in_range?(value)
|
35
|
+
@type.class::RANGE.cover? value
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
module INSTANCE
|
41
|
+
|
42
|
+
def set(value)
|
43
|
+
if value
|
44
|
+
if value.kind_of? Integer
|
45
|
+
if self.class.in_range?(value)
|
46
|
+
@value = value.to_i
|
47
|
+
else
|
48
|
+
raise Error.new "value out of range"
|
49
|
+
end
|
50
|
+
else
|
51
|
+
raise Error.new "value must be an integer"
|
52
|
+
end
|
53
|
+
elsif self.class.opt?
|
54
|
+
@value = nil
|
55
|
+
else
|
56
|
+
raise Error.new "value unacceptable"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def get
|
61
|
+
@value
|
62
|
+
end
|
63
|
+
|
64
|
+
# @param value [Integer, nil]
|
65
|
+
def initialize(value)
|
66
|
+
if value
|
67
|
+
set(value)
|
68
|
+
else
|
69
|
+
@value = nil
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
module U8
|
77
|
+
|
78
|
+
module CLASS
|
79
|
+
include SlowBlink::Message::INTEGER::CLASS
|
80
|
+
def from_compact!(input)
|
81
|
+
self.new(input.getU8!)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
module INSTANCE
|
86
|
+
include SlowBlink::Message::INTEGER::INSTANCE
|
87
|
+
def to_compact(out)
|
88
|
+
out.putU8(@value)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
module U16
|
95
|
+
|
96
|
+
module CLASS
|
97
|
+
include SlowBlink::Message::INTEGER::CLASS
|
98
|
+
def from_compact!(input)
|
99
|
+
self.new(input.getU16!)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
module INSTANCE
|
104
|
+
include SlowBlink::Message::INTEGER::INSTANCE
|
105
|
+
def to_compact(out)
|
106
|
+
out.putU16(@value)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
module U32
|
112
|
+
|
113
|
+
module CLASS
|
114
|
+
include SlowBlink::Message::INTEGER::CLASS
|
115
|
+
def from_compact!(input)
|
116
|
+
self.new(input.getU32!)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
module INSTANCE
|
121
|
+
include SlowBlink::Message::INTEGER::INSTANCE
|
122
|
+
def to_compact(out)
|
123
|
+
out.putU32(@value)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|
128
|
+
|
129
|
+
module U64
|
130
|
+
|
131
|
+
module CLASS
|
132
|
+
include SlowBlink::Message::INTEGER::CLASS
|
133
|
+
def from_compact!(input)
|
134
|
+
self.new(input.getU64!)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
module INSTANCE
|
139
|
+
include SlowBlink::Message::INTEGER::INSTANCE
|
140
|
+
def to_compact(out)
|
141
|
+
out.putU64(@value)
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
end
|
146
|
+
|
147
|
+
module I8
|
148
|
+
|
149
|
+
module CLASS
|
150
|
+
include SlowBlink::Message::INTEGER::CLASS
|
151
|
+
def from_compact!(input)
|
152
|
+
self.new(input.getI8!)
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
module INSTANCE
|
157
|
+
include SlowBlink::Message::INTEGER::INSTANCE
|
158
|
+
def to_compact(out)
|
159
|
+
out.putI8(@value)
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
end
|
164
|
+
|
165
|
+
module I16
|
166
|
+
module CLASS
|
167
|
+
include SlowBlink::Message::INTEGER::CLASS
|
168
|
+
def from_compact!(input)
|
169
|
+
self.new(input.getI16!)
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
module INSTANCE
|
174
|
+
include SlowBlink::Message::INTEGER::INSTANCE
|
175
|
+
def to_compact(out)
|
176
|
+
out.putI16(@value)
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
end
|
181
|
+
|
182
|
+
module I32
|
183
|
+
|
184
|
+
module CLASS
|
185
|
+
include SlowBlink::Message::INTEGER::CLASS
|
186
|
+
def from_compact!(input)
|
187
|
+
self.new(input.getI32!)
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
module INSTANCE
|
192
|
+
include INTEGER::INSTANCE
|
193
|
+
def to_compact(out)
|
194
|
+
out.putI32(@value)
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
end
|
199
|
+
|
200
|
+
module I64
|
201
|
+
|
202
|
+
module CLASS
|
203
|
+
include SlowBlink::Message::INTEGER::CLASS
|
204
|
+
def from_compact!(input)
|
205
|
+
self.new(input.getI64!)
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
module INSTANCE
|
210
|
+
include SlowBlink::Message::INTEGER::INSTANCE
|
211
|
+
def to_compact(out)
|
212
|
+
out.putI64(@value)
|
213
|
+
end
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
end
|