Method: Flt::FormatBase#initialize

Defined in:
lib/float-formats/classes.rb

#initialize(*args) ⇒ FormatBase

Returns a new instance of FormatBase.



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/float-formats/classes.rb', line 50

def initialize(*args)
  if (args.size == 3 || args.size==4 || args.size==2) &&
     (args.first.kind_of?(Integer) && args[1].kind_of?(Integer))
    sign,significand,exponent,normalize = args
    if normalize.nil?
      if [nil,true,false].include?(exponent)
        normalize = exponent
        exponent = significand
        significand = sign.abs
        sign = sign<0 ? -1 : +1
      end
    end
    @sign,@significand,@exponent = self.class.canonicalized(sign,significand,exponent,normalize)
  else
    v = form_class.nan
    case args.first
      when form_class
        v = args.first
        raise "Too many arguments for FormatBase constructor" if args.size>1
      when Array
        v = args.first
        raise "Too many arguments for FormatBase constructor" if args.size>1
      when FormatBase
        v = args.first.convert_to(form_class)
        raise "Too many arguments for FormatBase constructor" if args.size>1
      when String
        v = form_class.from_text(*args)
      when Bytes
        v = form_class.from_bytes(*args)
      when Bits
        v = form_class.from_bits(*args)
      when Numeric
        v = form_class.from_number(args.first)
        raise "Too many arguments for FormatBase constructor" if args.size>1
      when Symbol
        if args.first.to_s[0..3]!='from'
          args = ["from_#{args.first}".to_sym] + args[1..-1]
        end
        v = form_class.send(*args)
    end
    @sign,@significand,@exponent = v.to_a
  end
end