Sha256: b898a1f8c185bc9e7381228fe456619f07cbbbe622e720618cd0ee85af9058e4
Contents?: true
Size: 1.39 KB
Versions: 2
Compression:
Stored size: 1.39 KB
Contents
module Packable module Extensions #:nodoc: module Float #:nodoc: def self.included(base) base.class_eval do include Packable extend ClassMethods packers do |p| p.set :merge_all, :precision => :single, :endian => :big p.set :double , :precision => :double p.set :float , {} p.set :default , :float end end end def write_packed(io, options) io << pack(self.class.pack_option_to_format(options)) end module ClassMethods #:nodoc: ENDIAN_TO_FORMAT = Hash.new{|h, endian| raise ArgumentError, "Endian #{endian} is not valid. It must be one of #{h.keys.join(', ')}."}. merge!(:big => "G", :network => "G", :little => "E", :native => "F").freeze PRECISION = Hash.new{|h, precision| raise ArgumentError, "Precision #{precision} is not valid. It must be one of #{h.keys.join(', ')}."}. merge!(:single => 4, :double => 8).freeze def pack_option_to_format(options) format = ENDIAN_TO_FORMAT[options[:endian]] format.downcase! if options[:precision] == :single format end def read_packed(io, options) s = io.read_exactly(PRECISION[options[:precision]]) s && s.unpack(pack_option_to_format(options)).first end end end end end
Version data entries
2 entries across 2 versions & 2 rubygems
Version | Path |
---|---|
marcandre-packable-1.3.2 | lib/packable/extensions/float.rb |
packable-1.3.2 | lib/packable/extensions/float.rb |