class CF::Number

Wrapper for CFNumberRef

Public Class Methods

from_f(float) click to toggle source

Constructs a CF::Number from a float @param [Float] float @return [CF::Number]

# File lib/corefoundation/number.rb, line 39
def self.from_f(float)
  p = FFI::MemoryPointer.new(:double)
  p.write_double(float.to_f)
  new(CF.CFNumberCreate(nil, :kCFNumberDoubleType, p))
end
from_i(int) click to toggle source

Constructs a CF::Number from an integer @param [Integer] int @return [CF::Number]

# File lib/corefoundation/number.rb, line 48
def self.from_i(int)
  p = FFI::MemoryPointer.new(:int64)
  p.put_int64(0,int.to_i)
  new(CF.CFNumberCreate(nil, :kCFNumberSInt64Type, p))
end

Public Instance Methods

<=>(other) click to toggle source

Compares the receiver with the argument @param [CF::Number] other @return [Integer]

# File lib/corefoundation/number.rb, line 57
def <=>(other)
  raise TypeError, "argument should be CF::Number" unless other.is_a?(CF::Number)
  CF.CFNumberCompare(self,other,nil)
end
to_f() click to toggle source

Converts the CF::Number to a float May raise if the conversion cannot be done without loss of precision @return [Float]

# File lib/corefoundation/number.rb, line 89
def to_f
  p = FFI::MemoryPointer.new(:double)
  if CF.CFNumberGetValue(self, :kCFNumberDoubleType, p) != 0
    p.read_double
  else
    raise "CF.CFNumberGetValue failed to convert #{self.inspect} to kCFNumberDoubleType"
  end
end
to_i() click to toggle source

Converts the CF::Number to an integer May raise if the conversion cannot be done without loss of precision @return [Integer]

# File lib/corefoundation/number.rb, line 77
def to_i
  p = FFI::MemoryPointer.new(:int64)
  if CF.CFNumberGetValue(self, :kCFNumberSInt64Type, p) != 0
    p.get_int64 0
  else
    raise "CF.CFNumberGetValue failed to convert #{self.inspect} to kCFNumberSInt64Type"
  end
end
to_ruby() click to toggle source

Converts the CF::Number to either an Integer or a Float, depending on the result of CFNumberIsFloatType

@return [Integer, Float]

# File lib/corefoundation/number.rb, line 66
def to_ruby
  if CF.CFNumberIsFloatType(self) == 0
    to_i
  else
    to_f
  end
end