bit-struct 0.13.2 → 0.13.3
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +2 -0
- data/Rakefile +2 -0
- data/TODO +2 -0
- data/examples/vector.rb +2 -2
- data/lib/bit-struct/bit-struct.rb +1 -1
- data/lib/bit-struct/fields.rb +6 -2
- metadata +1 -2
- data/TODO-ALSO +0 -54
data/History.txt
CHANGED
data/Rakefile
CHANGED
data/TODO
CHANGED
data/examples/vector.rb
CHANGED
@@ -74,10 +74,10 @@ class Packet < BitStruct
|
|
74
74
|
unsigned :stuff, 32, "whatever"
|
75
75
|
|
76
76
|
# Using the Vec class defined above
|
77
|
-
vector :v, Vec, "a vector",
|
77
|
+
vector :v, Vec, "a vector", 5
|
78
78
|
|
79
79
|
# equivalently, using an anonymous subclass of BitStruct::Vector
|
80
|
-
vector :v2, "a vector 2",
|
80
|
+
vector :v2, "a vector 2", 5 do
|
81
81
|
unsigned :x, 16
|
82
82
|
signed :y, 32
|
83
83
|
end
|
data/lib/bit-struct/fields.rb
CHANGED
@@ -233,6 +233,8 @@ class BitStruct
|
|
233
233
|
#
|
234
234
|
# If a string is provided, use it for the display_name.
|
235
235
|
# If a hash is provided, use it for options.
|
236
|
+
# If a number is provided, use it for length (equivalent to using the
|
237
|
+
# :length option).
|
236
238
|
#
|
237
239
|
# WARNING: the accessors have COPY semantics, not reference. When you call a
|
238
240
|
# reader method to get the vector structure, you get a *copy* of that data.
|
@@ -274,9 +276,11 @@ class BitStruct
|
|
274
276
|
|
275
277
|
vector_class.default_options default_options
|
276
278
|
|
277
|
-
length = opts[:length]
|
279
|
+
length = opts[:length] || rest.grep(Integer).first
|
280
|
+
## what about :length => :lenfield
|
278
281
|
unless length
|
279
|
-
raise ArgumentError,
|
282
|
+
raise ArgumentError,
|
283
|
+
"Must provide length as argument N or as option :length => N"
|
280
284
|
end
|
281
285
|
|
282
286
|
opts[:default] ||= vector_class.new(length) ## nil if variable length
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bit-struct
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.13.
|
4
|
+
version: 0.13.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joel VanderWerf
|
@@ -41,7 +41,6 @@ files:
|
|
41
41
|
- README.txt
|
42
42
|
- Rakefile
|
43
43
|
- TODO
|
44
|
-
- TODO-ALSO
|
45
44
|
- examples/ara-player-data.rb
|
46
45
|
- examples/bignum.rb
|
47
46
|
- examples/bits.rb
|
data/TODO-ALSO
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
rest :name, :terminator => ...
|
2
|
-
|
3
|
-
> * Is explicit :length for vector necessary?
|
4
|
-
>
|
5
|
-
> class Tag < BitStruct
|
6
|
-
> signed :flags, 32
|
7
|
-
> vector :axis, Vec, :length => 3
|
8
|
-
> end
|
9
|
-
>
|
10
|
-
> compared to
|
11
|
-
>
|
12
|
-
> class Tag < BitStruct
|
13
|
-
> signed :flags, 32
|
14
|
-
> vector :axis, Vec, 3
|
15
|
-
> end
|
16
|
-
>
|
17
|
-
> Or am I missing any ambiguities because of the simple cases?
|
18
|
-
|
19
|
-
Nothing ambiguous, I just get giddy when there are too many positional args. But since length is required, it does make sense to pass it as a positional arg. I'll change that...
|
20
|
-
|
21
|
-
> * Allow length not only in bits, but also bytes?
|
22
|
-
>
|
23
|
-
> In my cases I've never encountered a situation where I needed a member
|
24
|
-
> of a structure to represent anything which is not on a byte boundary.
|
25
|
-
|
26
|
-
Sigh, if only life we always like that. There's a reason I call the library _bit_-struct :)
|
27
|
-
|
28
|
-
> All my signed and unsigned int have to read "32" (32bit, 4bytes) all
|
29
|
-
> over the place. For strings I'm writing "64*8" for string with 64
|
30
|
-
> characters.
|
31
|
-
>
|
32
|
-
> How about a new default_option :granularity which is "1" by default.
|
33
|
-
> When set to "8", every specified length (except for vector ...) is
|
34
|
-
> multiplied by that factor before used?
|
35
|
-
|
36
|
-
Hm, will think about that. I wish I could define Fixnum#bytes, but only in the context of field declarations in a BitStruct subclass.
|
37
|
-
|
38
|
-
I don't like granularity because it's really only meaningful if the value is 1 or 8. Perhaps :granularity => :bit, or :granularity => :byte. But I still don't like an option that you have to keep in mind to understand whether
|
39
|
-
|
40
|
-
char :x, 80
|
41
|
-
|
42
|
-
is 8 or 80 chars. It's too much context sensitivity.
|
43
|
-
|
44
|
-
What about
|
45
|
-
|
46
|
-
signed :x, bytes(4)
|
47
|
-
|
48
|
-
Is that too clunky? It would be trivial to implement...
|
49
|
-
|
50
|
-
> * Why "vector" and not just "array"?
|
51
|
-
|
52
|
-
For consistency with things like NArray, which has Vector, Matrix, and Array classes, where vectors are essentially one-dim arrays.
|
53
|
-
|
54
|
-
Also, "array" might lead to confusion with ruby arrays.
|