Class: Rlp::Sedes::BigEndianInt
- Inherits:
-
Object
- Object
- Rlp::Sedes::BigEndianInt
- Defined in:
- lib/rlp-lite/sedes/big_endian_int.rb
Overview
A serializable, big-endian, unsigned integer type.
Instance Method Summary collapse
-
#_big_endian_to_int(str) ⇒ Integer
An unpacked integer number.
-
#_int_to_big_endian(num) ⇒ String
Packed, big-endian integer string.
-
#deserialize(serial) ⇒ Integer
Deserializes an unsigned integer.
-
#initialize(size = nil) ⇒ BigEndianInt
constructor
Create a serializable, big-endian, unsigned integer.
-
#serialize(obj) ⇒ String
Serialize a big-endian integer.
Constructor Details
#initialize(size = nil) ⇒ BigEndianInt
Create a serializable, big-endian, unsigned integer.
12 13 14 |
# File 'lib/rlp-lite/sedes/big_endian_int.rb', line 12 def initialize(size = nil) @size = size end |
Instance Method Details
#_big_endian_to_int(str) ⇒ Integer
Returns an unpacked integer number.
64 65 66 |
# File 'lib/rlp-lite/sedes/big_endian_int.rb', line 64 def _big_endian_to_int(str) str.unpack("H*").first.to_i(16) end |
#_int_to_big_endian(num) ⇒ String
Returns packed, big-endian integer string.
53 54 55 56 57 58 |
# File 'lib/rlp-lite/sedes/big_endian_int.rb', line 53 def _int_to_big_endian( num ) hex = num.to_s(16) hex = "0#{hex}" if hex.size.odd? [hex].pack("H*") ## note Util.hex_to_bin() "inline" shortcut end |
#deserialize(serial) ⇒ Integer
Deserializes an unsigned integer.
37 38 39 40 41 42 |
# File 'lib/rlp-lite/sedes/big_endian_int.rb', line 37 def deserialize(serial) raise DeserializationError, "Invalid serialization (wrong size)" if @size && serial.size != @size raise DeserializationError, "Invalid serialization (not minimal length)" if !@size && serial.size > 0 && serial[0] == BYTE_ZERO serial = serial || BYTE_ZERO _big_endian_to_int( serial ) end |
#serialize(obj) ⇒ String
Serialize a big-endian integer.
23 24 25 26 27 28 29 |
# File 'lib/rlp-lite/sedes/big_endian_int.rb', line 23 def serialize(obj) raise SerializationError, "Can only serialize integers" unless obj.is_a?(Integer) raise SerializationError, "Cannot serialize negative integers" if obj < 0 raise SerializationError, "Integer too large (does not fit in #{@size} bytes)" if @size && obj >= 256 ** @size s = obj == 0 ? BYTE_EMPTY : _int_to_big_endian( obj ) @size ? "#{BYTE_ZERO * [0, @size - s.size].max}#{s}" : s end |