impress/vendor/gems/RocketAMF-1.0.0/lib/rocketamf/pure/io_helpers.rb

94 lines
2.2 KiB
Ruby
Raw Permalink Normal View History

module RocketAMF
module Pure
module ReadIOHelpers #:nodoc:
def read_int8 source
source.read(1).unpack('c').first
end
def read_word8 source
source.read(1).unpack('C').first
end
def read_double source
source.read(8).unpack('G').first
end
def read_word16_network source
source.read(2).unpack('n').first
end
def read_int16_network source
str = source.read(2)
str.reverse! if byte_order_little? # swap bytes as native=little (and we want network)
str.unpack('s').first
end
def read_word32_network source
source.read(4).unpack('N').first
end
def byte_order
if [0x12345678].pack("L") == "\x12\x34\x56\x78"
:BigEndian
else
:LittleEndian
end
end
def byte_order_little?
(byte_order == :LittleEndian) ? true : false;
end
end
module WriteIOHelpers #:nodoc:
def pack_integer(integer)
integer = integer & 0x1fffffff
if(integer < 0x80)
[integer].pack('c')
elsif(integer < 0x4000)
[integer >> 7 & 0x7f | 0x80].pack('c')+
[integer & 0x7f].pack('c')
elsif(integer < 0x200000)
[integer >> 14 & 0x7f | 0x80].pack('c') +
[integer >> 7 & 0x7f | 0x80].pack('c') +
[integer & 0x7f].pack('c')
else
[integer >> 22 & 0x7f | 0x80].pack('c')+
[integer >> 15 & 0x7f | 0x80].pack('c')+
[integer >> 8 & 0x7f | 0x80].pack('c')+
[integer & 0xff].pack('c')
end
end
def pack_double(double)
[double].pack('G')
end
def pack_int8(val)
[val].pack('c')
end
def pack_int16_network(val)
[val].pack('n')
end
def pack_word32_network(val)
str = [val].pack('L')
str.reverse! if byte_order_little? # swap bytes as native=little (and we want network)
str
end
def byte_order
if [0x12345678].pack("L") == "\x12\x34\x56\x78"
:BigEndian
else
:LittleEndian
end
end
def byte_order_little?
(byte_order == :LittleEndian) ? true : false;
end
end
end
end