Skip to content

Commit d99f050

Browse files
author
Dion Mendel
committed
Improved creation time of Bits and Integers
1 parent bb60531 commit d99f050

File tree

3 files changed

+16
-10
lines changed

3 files changed

+16
-10
lines changed

ChangeLog.rdoc

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
= BinData Changelog
22

3+
== Version 2.4.10 (2021-05-18)
4+
5+
* Improve speed of dynamic object creation. Reported by Charlie Ablett.
6+
37
== Version 2.4.9 (2021-04-22)
48

59
* Change example from Fixnum to Integer. Thanks to Tim Chambers.

lib/bindata/bits.rb

+5-5
Original file line numberDiff line numberDiff line change
@@ -115,14 +115,14 @@ def create_fixed_clamp_code(nbits, signed)
115115
end
116116

117117
if signed == :signed
118-
max = (1 << (nbits - 1)) - 1
119-
min = -(max + 1)
118+
max = "max = (1 << (#{nbits} - 1)) - 1"
119+
min = "min = -(max + 1)"
120120
else
121-
min = 0
122-
max = (1 << nbits) - 1
121+
min = "min = 0"
122+
max = "max = (1 << #{nbits}) - 1"
123123
end
124124

125-
clamp = "(val < #{min}) ? #{min} : (val > #{max}) ? #{max} : val"
125+
clamp = "(#{max}; #{min}; val = (val < min) ? min : (val > max) ? max : val)"
126126

127127
if nbits == 1
128128
# allow single bits to be used as booleans

lib/bindata/int.rb

+7-5
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,16 @@ def read_and_return_value(io)
5959

6060
def create_clamp_code(nbits, signed)
6161
if signed == :signed
62-
max = (1 << (nbits - 1)) - 1
63-
min = -(max + 1)
62+
max = "max = (1 << (#{nbits} - 1)) - 1"
63+
min = "min = -(max + 1)"
6464
else
65-
max = (1 << nbits) - 1
66-
min = 0
65+
max = "max = (1 << #{nbits}) - 1"
66+
min = "min = 0"
6767
end
6868

69-
"val = (val < #{min}) ? #{min} : (val > #{max}) ? #{max} : val"
69+
clamp = "(#{max}; #{min}; val = (val < min) ? min : (val > max) ? max : val)"
70+
71+
"val = #{clamp}"
7072
end
7173

7274
def create_read_code(nbits, endian, signed)

0 commit comments

Comments
 (0)