Sha256: d1f6da0286bbfe785e034f5ca02cbefd0f07e79bc1f9fb9433382b21381ef5e1

Contents?: true

Size: 1.01 KB

Versions: 6

Compression:

Stored size: 1.01 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:
        def pack_option_to_format(options)
          format = {:big => "G", :network => "G", :little => "E"}[options[:endian]]
          format.downcase! if options[:precision] == :single
          format
        end

        def read_packed(io, options)
          io.read({:single => 4, :double => 8}[options[:precision]])   \
            .unpack(pack_option_to_format(options))   \
            .first
        end
      end
      
    end
  end
end

Version data entries

6 entries across 6 versions & 2 rubygems

Version Path
marcandre-packable-1.1.2 lib/packable/extensions/float.rb
marcandre-packable-1.1.3 lib/packable/extensions/float.rb
marcandre-packable-1.2.0 lib/packable/extensions/float.rb
marcandre-packable-1.2.1 lib/packable/extensions/float.rb
packable-1.2.0 lib/packable/extensions/float.rb
packable-1.2.1 lib/packable/extensions/float.rb