Class: FFXCodec::Encoder
- Inherits:
-
Object
- Object
- FFXCodec::Encoder
- Defined in:
- lib/ffxcodec/encoder.rb
Overview
Encode two integers into one larger integer and decode back
Instance Attribute Summary collapse
-
#a_max ⇒ Fixnum
readonly
Maximum unsigned value representable by left integer.
-
#b_max ⇒ Fixnum
readonly
Maximum unsigned value representable by right integer.
-
#size ⇒ Fixnum
readonly
Size of encoded integer in bits (32 or 64).
Instance Method Summary collapse
-
#decode(c) ⇒ Array<Fixnum>
Separate an unsigned integer into two smaller unsigned integers.
-
#encode(a, b) ⇒ Fixnum, Bignum
Combine two unsigned integers into a single, larger unsigned integer.
-
#initialize(a_size = 32, b_size = 32) ⇒ Encoder
constructor
A new instance of Encoder.
Constructor Details
#initialize(a_size = 32, b_size = 32) ⇒ Encoder
Returns a new instance of Encoder.
15 16 17 18 19 20 21 |
# File 'lib/ffxcodec/encoder.rb', line 15 def initialize(a_size = 32, b_size = 32) @a_size = a_size @b_size = b_size @a_max, @b_max = maximums(a_size, b_size) @size = a_size + b_size check_size end |
Instance Attribute Details
#a_max ⇒ Fixnum (readonly)
Returns maximum unsigned value representable by left integer.
8 9 10 |
# File 'lib/ffxcodec/encoder.rb', line 8 def a_max @a_max end |
#b_max ⇒ Fixnum (readonly)
Returns maximum unsigned value representable by right integer.
11 12 13 |
# File 'lib/ffxcodec/encoder.rb', line 11 def b_max @b_max end |
#size ⇒ Fixnum (readonly)
Returns size of encoded integer in bits (32 or 64).
5 6 7 |
# File 'lib/ffxcodec/encoder.rb', line 5 def size @size end |
Instance Method Details
#decode(c) ⇒ Array<Fixnum>
Separate an unsigned integer into two smaller unsigned integers
47 48 49 50 51 52 |
# File 'lib/ffxcodec/encoder.rb', line 47 def decode(c) i = interlace(c) a = i >> @b_size b = (i ^ (a << @b_size)) [a, b] end |
#encode(a, b) ⇒ Fixnum, Bignum
Combine two unsigned integers into a single, larger unsigned integer
33 34 35 36 37 |
# File 'lib/ffxcodec/encoder.rb', line 33 def encode(a, b) check_ab_bounds(a, b) i = (a << @b_size) ^ b interlace(i) end |