asciipack 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 57e17422c3a216d7f7c2309e41efd0ad6c7ab718
4
- data.tar.gz: 6bb53b24982c3f537c6db9b644a0436c36a70639
3
+ metadata.gz: 12c016c4cbf6dc6932200cd28774219195a6897b
4
+ data.tar.gz: db20a4941ad342f86992244148e3fda496f32c5c
5
5
  SHA512:
6
- metadata.gz: bc85c67d615ec94d27e0222e1b9ad74b1195a21abbecf48e5666376196f4d1fb8813fd97c1e463708003b5ed1c6c3f35c0c1f0d24a340f194b36b4e6435bb530
7
- data.tar.gz: 7d398d537b5c390eebac442c7b329388184f7d5a84e38d9a53fb0096b0326b638aaf2d37c0ab369003d43b051be7eec5e72351f2da140c66547eadc9699b21c1
6
+ metadata.gz: cd8780bb46e2fa092cd8035efccd1174e6f8c7c659f2d3f2a702694e46f29d5dc78cd555e21678dbdadba2b63f2feef17e51d0ac8726b06f4a036d3758607282
7
+ data.tar.gz: f0a6ec0a80d7f49f28e5c08177323779e8c3491f0084d3742e09e596bb7311c59c214252e2957a9f2ccbe7da9063a9d8d71fd221ab207404c340fbc88fcbdd6f
@@ -1,5 +1,3 @@
1
- require 'asciipack/typemap.rb'
2
-
3
1
  module AsciiPack
4
2
  class Packer
5
3
  class << self
@@ -55,38 +53,38 @@ module AsciiPack
55
53
  raise "pack size limit over"
56
54
  end
57
55
  when obj.nil?
58
- TypeMap.nil
56
+ "W"
59
57
  when obj == false
60
- TypeMap.false
58
+ "X"
61
59
  when obj == true
62
- TypeMap.true
60
+ "Y"
63
61
  end
64
62
  end
65
63
 
66
64
  private
67
65
 
68
66
  def int4 (obj)
69
- TypeMap.int4 + ((obj & 0xf).to_s(16))
67
+ "a" + ((obj & 0xf).to_s(16))
70
68
  end
71
69
 
72
70
  def int8 (obj)
73
- TypeMap.int8 + ((obj & 0xff).to_s(16))
71
+ "b" + ((obj & 0xff).to_s(16))
74
72
  end
75
73
 
76
74
  def int16 (obj)
77
- TypeMap.int16 + ((obj & 0xffff).to_s(16))
75
+ "c" + ((obj & 0xffff).to_s(16))
78
76
  end
79
77
 
80
78
  def int16 (obj)
81
- TypeMap.int16 + ((obj & 0xffff).to_s(16))
79
+ "c" + ((obj & 0xffff).to_s(16))
82
80
  end
83
81
 
84
82
  def int32 (obj)
85
- TypeMap.int32 + ((obj & 0xffffffff).to_s(16))
83
+ "d" + ((obj & 0xffffffff).to_s(16))
86
84
  end
87
85
 
88
86
  def int64 (obj)
89
- TypeMap.int64 + ((obj & 0xffffffffffffffff).to_s(16))
87
+ "e" + ((obj & 0xffffffffffffffff).to_s(16))
90
88
  end
91
89
 
92
90
  def positive_fixint (obj)
@@ -94,27 +92,27 @@ module AsciiPack
94
92
  end
95
93
 
96
94
  def uint8 (obj)
97
- format_uint(TypeMap.uint8, 2, obj)
95
+ format_uint("g", 2, obj)
98
96
  end
99
97
 
100
98
  def uint16 (obj)
101
- format_uint(TypeMap.uint16, 4, obj)
99
+ format_uint("h", 4, obj)
102
100
  end
103
101
 
104
102
  def uint32 (obj)
105
- format_uint(TypeMap.uint32, 8, obj)
103
+ format_uint("i", 8, obj)
106
104
  end
107
105
 
108
106
  def uint64 (obj)
109
- format_uint(TypeMap.uint64, 16, obj)
107
+ format_uint("j", 16, obj)
110
108
  end
111
109
 
112
110
  def float64 (obj)
113
111
  unless obj.finite?
114
112
  case obj.infinite?
115
- when 1; return TypeMap.float64 + '7ff0000000000000' # +∞
116
- when -1; return TypeMap.float64 + 'fff0000000000000' # -∞
117
- else; return TypeMap.float64 + '7fffffffffffffff' # NAN
113
+ when 1; return "l" + '7ff0000000000000' # +∞
114
+ when -1; return "l" + 'fff0000000000000' # -∞
115
+ else; return "l" + '7fffffffffffffff' # NAN
118
116
  end
119
117
  end
120
118
 
@@ -126,7 +124,7 @@ module AsciiPack
126
124
  exp |= 0x800 if sign
127
125
  high = ((frac / 0x100000000).to_i & 0xfffff) | (exp << 20)
128
126
 
129
- TypeMap.float64 + to_s16([
127
+ "l" + to_s16([
130
128
  (high >> 24) & 0xff, (high >> 16) & 0xff,
131
129
  (high >> 8) & 0xff, (high) & 0xff,
132
130
  (low >> 24) & 0xff, (low >> 16) & 0xff,
@@ -139,15 +137,15 @@ module AsciiPack
139
137
  end
140
138
 
141
139
  def str8 (obj)
142
- format_str TypeMap.str8, 2, obj
140
+ format_str "n", 2, obj
143
141
  end
144
142
 
145
143
  def str16 (obj)
146
- format_str TypeMap.str16, 4, obj
144
+ format_str "o", 4, obj
147
145
  end
148
146
 
149
147
  def str32 (obj)
150
- format_str TypeMap.str32, 8, obj
148
+ format_str "p", 8, obj
151
149
  end
152
150
 
153
151
  def map (obj)
@@ -156,13 +154,13 @@ module AsciiPack
156
154
  keys.push(pack(key) + pack(value))
157
155
  }
158
156
  if keys.length < 0x10
159
- f = [TypeMap.map4, 1]
157
+ f = ["r", 1]
160
158
  elsif keys.length < 0x100
161
- f = [TypeMap.map8, 2]
159
+ f = ["s", 2]
162
160
  elsif keys.length < 0x10000
163
- f = [TypeMap.map16, 4]
161
+ f = ["t", 4]
164
162
  elsif keys.length < 0x100000000
165
- f = [TypeMap.map32, 8]
163
+ f = ["u", 8]
166
164
  else
167
165
  raise "pack size limit over"
168
166
  end
@@ -175,13 +173,13 @@ module AsciiPack
175
173
  keys.push(pack(value));
176
174
  }
177
175
  if keys.length < 0x10
178
- f = [TypeMap.array4, 1]
176
+ f = ["v", 1]
179
177
  elsif keys.length < 0x100
180
- f = [TypeMap.array8, 2]
178
+ f = ["w", 2]
181
179
  elsif keys.length < 0x10000
182
- f = [TypeMap.array16, 4]
180
+ f = ["x", 4]
183
181
  elsif keys.length < 0x100000000
184
- f = [TypeMap.array32, 8]
182
+ f = ["y", 8]
185
183
  else
186
184
  raise "pack size limit over"
187
185
  end
@@ -1,43 +1,63 @@
1
- require 'asciipack/typemap.rb'
2
-
3
1
  module AsciiPack
4
2
  class Unpacker
3
+ @@fixmap = {
4
+ "0" => 0x0,
5
+ "1" => 0x1,
6
+ "2" => 0x2,
7
+ "3" => 0x3,
8
+ "4" => 0x4,
9
+ "5" => 0x5,
10
+ "6" => 0x6,
11
+ "7" => 0x7,
12
+ "8" => 0x8,
13
+ "9" => 0x9,
14
+ "A" => 0xa,
15
+ "B" => 0xb,
16
+ "C" => 0xc,
17
+ "D" => 0xd,
18
+ "E" => 0xe,
19
+ "F" => 0xf,
20
+ "W" => nil,
21
+ "X" => false,
22
+ "Y" => true,
23
+ }.freeze
24
+
5
25
  def initialize (ap)
6
26
  @ap = ap
7
- @ret = nil
8
27
  @at = 0
9
28
  @ch = @ap[0]
10
29
  end
11
30
 
12
31
  def unpack
13
32
  move
33
+
34
+ if @@fixmap.key?(@ch)
35
+ return @@fixmap[@ch]
36
+ end
37
+
14
38
  case @ch
15
- when /[0-9A-F]/; positive_fixint
39
+ when "a"; int4
40
+ when "b"; int8
41
+ when "c"; int16
42
+ when "d"; int32
43
+ when "e"; int64
44
+ when "g"; uint8
45
+ when "h"; uint16
46
+ when "i"; uint32
47
+ when "j"; uint64
48
+ when "l"; float64
49
+ when "n"; str8
50
+ when "o"; str16
51
+ when "p"; str32
52
+ when "r"; map4
53
+ when "s"; map8
54
+ when "t"; map16
55
+ when "u"; map32
56
+ when "v"; array4
57
+ when "w"; array8
58
+ when "x"; array16
59
+ when "y"; array32
16
60
  when /[G-V]/; fixstr
17
- when TypeMap.int4; int4
18
- when TypeMap.int8; int8
19
- when TypeMap.int16; int16
20
- when TypeMap.int32; int32
21
- when TypeMap.int64; int64
22
- when TypeMap.uint8; uint8
23
- when TypeMap.uint16; uint16
24
- when TypeMap.uint32; uint32
25
- when TypeMap.uint64; uint64
26
- when TypeMap.float64; float64
27
- when TypeMap.map4; map4
28
- when TypeMap.map8; map8
29
- when TypeMap.map16; map16
30
- when TypeMap.map32; map32
31
- when TypeMap.array4; array4
32
- when TypeMap.array8; array8
33
- when TypeMap.array16; array16
34
- when TypeMap.array32; array32
35
- when TypeMap.str8; str8
36
- when TypeMap.str16; str16
37
- when TypeMap.str32; str32
38
- when TypeMap.nil; nil
39
- when TypeMap.false; false
40
- when TypeMap.true; true
41
61
  else raise "undefined type " + @ch.to_s
42
62
  end
43
63
  end
@@ -51,10 +71,10 @@ private
51
71
  end
52
72
 
53
73
  def cut (len)
54
- @ret = @ap[@at...(@at + len)]
74
+ ret = @ap[@at...(@at + len)]
55
75
  @at += len
56
76
  @ch = @ap[@at]
57
- @ret
77
+ ret
58
78
  end
59
79
 
60
80
  def int4
@@ -87,10 +107,6 @@ private
87
107
  (c[0].to_i(16) < 0x8) ? i : i - 0x10000000000000000;
88
108
  end
89
109
 
90
- def positive_fixint
91
- @ch.to_i(16)
92
- end
93
-
94
110
  def uint8
95
111
  cut(2).to_i(16)
96
112
  end
@@ -156,7 +172,7 @@ private
156
172
  def array32; array(8) end
157
173
 
158
174
  def fixstr
159
- len = @ch.ord - 71 # 71 = TypeMap.fixstr_0.ord
175
+ len = @ch.ord - 71 # 71 = "G".ord
160
176
  cut(len)
161
177
  end
162
178
 
@@ -1,3 +1,3 @@
1
1
  module AsciiPack
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
data/spec/bench.rb CHANGED
@@ -36,12 +36,14 @@ def bench(name)
36
36
  100000.times {
37
37
  yield
38
38
  }
39
- p name + ': ' + (Time.now - t).to_s + 'ms'
39
+ p name + ': ' + (Time.now - t).to_s + 's'
40
40
  end
41
41
 
42
+ tt = Time.now
42
43
  {
43
44
  "positive fixint" => 0,
44
45
  "uint 4" => 16,
46
+ "int 4" => -1,
45
47
  "fixstr" => "",
46
48
  "str 8" => '0123456789abcdef',
47
49
  "float 64" => 1/3,
@@ -52,4 +54,4 @@ end
52
54
  json_asciipack key, value
53
55
  }
54
56
 
55
- p AsciiPack.pack("あああ")
57
+ p 'total: ' + (Time.now - tt).to_s + 's'
data/spec/format_spec.rb CHANGED
@@ -74,29 +74,29 @@ describe AsciiPack do
74
74
  expect(AsciiPack.pack(-1 / 0.0)).to eq(T.float64 + 'fff0000000000000')
75
75
  end
76
76
 
77
- it "fixstr" do
78
- format "", T.fixstr_0, 1
79
- format " ", T.fixstr_1, 2
80
- format "あ", T.fixstr_1, 2
81
- format "漢字", T.fixstr_2, 3
82
- format " " * 0xe, T.fixstr_E, 15
83
- format " " * 0xf, T.fixstr_F, 16
77
+ it "fixbin" do
78
+ format "", T.fixbin_0, 1
79
+ format " ", T.fixbin_1, 2
80
+ format "あ", T.fixbin_1, 2
81
+ format "漢字", T.fixbin_2, 3
82
+ format " " * 0xe, T.fixbin_E, 15
83
+ format " " * 0xf, T.fixbin_F, 16
84
84
  end
85
85
 
86
- it "str 8" do
87
- format "a" * 0x10, T.str8, 3 + 0x10
88
- format "a" * 0xff, T.str8, 3 + 0xff
86
+ it "bin 8" do
87
+ format "a" * 0x10, T.bin8, 3 + 0x10
88
+ format "a" * 0xff, T.bin8, 3 + 0xff
89
89
  end
90
90
 
91
- it "str 16" do
92
- format "a" * 0x100, T.str16, 5 + 0x100
93
- format "a" * 0xffff, T.str16, 5 + 0xffff
91
+ it "bin 16" do
92
+ format "a" * 0x100, T.bin16, 5 + 0x100
93
+ format "a" * 0xffff, T.bin16, 5 + 0xffff
94
94
  end
95
95
 
96
- it "str 32" do
97
- format "a" * 0x10000, T.str32, 9 + 0x10000
96
+ it "bin 32" do
97
+ format "a" * 0x10000, T.bin32, 9 + 0x10000
98
98
  # FIXME too late
99
- # format "a" * 0xffffffff, T.str32, 9 + 0xffffffff
99
+ # format "a" * 0xffffffff, T.bin32, 9 + 0xffffffff
100
100
  end
101
101
 
102
102
  it "map 4" do
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,67 @@
1
1
  require 'asciipack'
2
+ require 'ostruct'
2
3
 
3
- T = AsciiPack::TypeMap
4
+ T = OpenStruct.new({
5
+ :int4 => 'a',
6
+ :int8 => 'b',
7
+ :int16 => 'c',
8
+ :int32 => 'd',
9
+ :int64 => 'e',
10
+ # (blank) => 'f',
11
+ :uint8 => 'g',
12
+ :uint16 => 'h',
13
+ :uint32 => 'i',
14
+ :uint64 => 'j',
15
+ :float32 => 'k',
16
+ :float64 => 'l',
17
+ # (blank) => 'm',
18
+ :bin8 => 'n',
19
+ :bin16 => 'o',
20
+ :bin32 => 'p',
21
+ # (blank) => 'q',
22
+ :map4 => 'r',
23
+ :map8 => 's',
24
+ :map16 => 't',
25
+ :map32 => 'u',
26
+ :array4 => 'v',
27
+ :array8 => 'w',
28
+ :array16 => 'x',
29
+ :array32 => 'y',
30
+ # (blank) => 'z',
31
+ :positive_fixint_0 => '0',
32
+ :positive_fixint_1 => '1',
33
+ :positive_fixint_2 => '2',
34
+ :positive_fixint_3 => '3',
35
+ :positive_fixint_4 => '4',
36
+ :positive_fixint_5 => '5',
37
+ :positive_fixint_6 => '6',
38
+ :positive_fixint_7 => '7',
39
+ :positive_fixint_8 => '8',
40
+ :positive_fixint_9 => '9',
41
+ :positive_fixint_A => 'A',
42
+ :positive_fixint_B => 'B',
43
+ :positive_fixint_C => 'C',
44
+ :positive_fixint_D => 'D',
45
+ :positive_fixint_E => 'E',
46
+ :positive_fixint_F => 'F',
47
+ :fixbin_0 => 'G',
48
+ :fixbin_1 => 'H',
49
+ :fixbin_2 => 'I',
50
+ :fixbin_3 => 'J',
51
+ :fixbin_4 => 'K',
52
+ :fixbin_5 => 'L',
53
+ :fixbin_6 => 'M',
54
+ :fixbin_7 => 'N',
55
+ :fixbin_8 => 'O',
56
+ :fixbin_9 => 'P',
57
+ :fixbin_A => 'Q',
58
+ :fixbin_B => 'R',
59
+ :fixbin_C => 'S',
60
+ :fixbin_D => 'T',
61
+ :fixbin_E => 'U',
62
+ :fixbin_F => 'V',
63
+ :nil => 'W',
64
+ :false => 'X',
65
+ :true => 'Y',
66
+ # (blank) => 'Z',
67
+ })
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asciipack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - ksss
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-13 00:00:00.000000000 Z
11
+ date: 2013-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,7 +66,6 @@ files:
66
66
  - asciipack.gemspec
67
67
  - lib/asciipack.rb
68
68
  - lib/asciipack/packer.rb
69
- - lib/asciipack/typemap.rb
70
69
  - lib/asciipack/unpacker.rb
71
70
  - lib/asciipack/version.rb
72
71
  - spec/bench.rb
@@ -1,68 +0,0 @@
1
- require 'ostruct'
2
-
3
- module AsciiPack
4
- TypeMap = OpenStruct.new({
5
- :int4 => 'a',
6
- :int8 => 'b',
7
- :int16 => 'c',
8
- :int32 => 'd',
9
- :int64 => 'e',
10
- # (blank) => 'f',
11
- :uint8 => 'g',
12
- :uint16 => 'h',
13
- :uint32 => 'i',
14
- :uint64 => 'j',
15
- :float32 => 'k',
16
- :float64 => 'l',
17
- # (blank) => 'm',
18
- :str8 => 'n',
19
- :str16 => 'o',
20
- :str32 => 'p',
21
- # (blank) => 'q',
22
- :map4 => 'r',
23
- :map8 => 's',
24
- :map16 => 't',
25
- :map32 => 'u',
26
- :array4 => 'v',
27
- :array8 => 'w',
28
- :array16 => 'x',
29
- :array32 => 'y',
30
- # (blank) => 'z',
31
- :positive_fixint_0 => '0',
32
- :positive_fixint_1 => '1',
33
- :positive_fixint_2 => '2',
34
- :positive_fixint_3 => '3',
35
- :positive_fixint_4 => '4',
36
- :positive_fixint_5 => '5',
37
- :positive_fixint_6 => '6',
38
- :positive_fixint_7 => '7',
39
- :positive_fixint_8 => '8',
40
- :positive_fixint_9 => '9',
41
- :positive_fixint_A => 'A',
42
- :positive_fixint_B => 'B',
43
- :positive_fixint_C => 'C',
44
- :positive_fixint_D => 'D',
45
- :positive_fixint_E => 'E',
46
- :positive_fixint_F => 'F',
47
- :fixstr_0 => 'G',
48
- :fixstr_1 => 'H',
49
- :fixstr_2 => 'I',
50
- :fixstr_3 => 'J',
51
- :fixstr_4 => 'K',
52
- :fixstr_5 => 'L',
53
- :fixstr_6 => 'M',
54
- :fixstr_7 => 'N',
55
- :fixstr_8 => 'O',
56
- :fixstr_9 => 'P',
57
- :fixstr_A => 'Q',
58
- :fixstr_B => 'R',
59
- :fixstr_C => 'S',
60
- :fixstr_D => 'T',
61
- :fixstr_E => 'U',
62
- :fixstr_F => 'V',
63
- :nil => 'W',
64
- :false => 'X',
65
- :true => 'Y',
66
- # (blank) => 'Z',
67
- })
68
- end