impress/vendor/gems/RocketAMF-1.0.0/lib/rocketamf/pure/io_helpers.rb
Emi Matchu b1f06029f8 Moderize RocketAMF C types to fix build error
I'm not sure if this is a Mac-only problem or what, but we were getting incompatible-function-pointer errors when trying to build the RocketAMF C extensions. This fixes that! (Maybe it's like, Mac-only but as of Ruby 3.4 in specific? We're running RocketAMF in production on Ruby 3.4 right now without this. Shrug.)
2025-10-30 02:45:56 +00:00

94 lines
No EOL
2.2 KiB
Ruby

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