class ICU::Collation::Collator

Constants

ULOC_VALID_LOCALE

Public Class Methods

new(locale) click to toggle source
# File lib/ffi-icu/collation.rb, line 32
def initialize(locale)
  ptr = Lib.check_error { |error| Lib.ucol_open(locale, error) }
  @c = FFI::AutoPointer.new(ptr, Lib.method(:ucol_close))
end

Public Instance Methods

collate(sortable) click to toggle source
# File lib/ffi-icu/collation.rb, line 72
def collate(sortable)
  unless sortable.respond_to?(:sort)
    raise ArgumentError, "argument must respond to :sort with arity of 2"
  end

  sortable.sort { |a, b| compare a, b }
end
compare(a, b) click to toggle source
# File lib/ffi-icu/collation.rb, line 41
def compare(a, b)
  Lib.ucol_strcoll(
    @c,
    UCharPointer.from_string(a), a.jlength,
    UCharPointer.from_string(b), b.jlength
  )
end
equal?(*args) click to toggle source
Calls superclass method
# File lib/ffi-icu/collation.rb, line 59
def equal?(*args)
  return super() if args.empty?

  if args.size != 2
    raise ArgumentError, "wrong number of arguments (#{args.size} for 2)"
  end

  a, b = args

  Lib.ucol_equal(@c, UCharPointer.from_string(a), a.jlength,
                     UCharPointer.from_string(b), b.jlength)
end
greater?(a, b) click to toggle source
# File lib/ffi-icu/collation.rb, line 49
def greater?(a, b)
  Lib.ucol_greater(@c, UCharPointer.from_string(a), a.jlength,
                       UCharPointer.from_string(b), b.jlength)
end
greater_or_equal?(a, b) click to toggle source
# File lib/ffi-icu/collation.rb, line 54
def greater_or_equal?(a, b)
  Lib.ucol_greaterOrEqual(@c, UCharPointer.from_string(a), a.jlength,
                              UCharPointer.from_string(b), b.jlength)
end
locale() click to toggle source
# File lib/ffi-icu/collation.rb, line 37
def locale
  Lib.check_error { |error| Lib.ucol_getLocale(@c, ULOC_VALID_LOCALE, error) }
end
rules() click to toggle source
# File lib/ffi-icu/collation.rb, line 80
def rules
  @rules ||= begin
    length = FFI::MemoryPointer.new(:int)
    ptr = ICU::Lib.ucol_getRules(@c, length)
    ptr.read_array_of_uint16(length.read_int).pack("U*")
  end
end