Sha256: a9fdc7ee7b2c243fad1ef15eee35412c3022006d0e036b69e82546e8fa3a1a44

Contents?: true

Size: 1.03 KB

Versions: 8

Compression:

Stored size: 1.03 KB

Contents

module ICU
  class UCharPointer < FFI::MemoryPointer

    UCHAR_TYPE = :uint16 # not sure how platform-dependent this is..
    TYPE_SIZE  = FFI.type_size(UCHAR_TYPE)

    def self.from_string(str, capacity = nil)
      str   = str.encode("UTF-8") if str.respond_to? :encode
      chars = str.unpack("U*")

      if capacity
        if capacity < chars.size
          raise ArgumentError, "capacity is too small for string of #{chars.size} UChars"
        end

        ptr = new capacity
      else
        ptr = new chars.size
      end

      ptr.write_array_of_uint16 chars

      ptr
    end

    def initialize(size)
      super UCHAR_TYPE, size
    end

    def resized_to(new_size)
      raise "new_size must be larger than current size" if new_size < size

      resized = self.class.new new_size
      resized.put_bytes(0, get_bytes(0, size))

      resized
    end

    def string(length = nil)
      length ||= size / TYPE_SIZE

      wstring = read_array_of_uint16(length)
      wstring.pack("U*")
    end


  end # UCharPointer
end # ICU

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
ffi-icu-0.4.1 lib/ffi-icu/uchar.rb
ffi-icu-0.4.0 lib/ffi-icu/uchar.rb
ffi-icu-0.3.0 lib/ffi-icu/uchar.rb
ffi-icu-0.2.0 lib/ffi-icu/uchar.rb
ffi-icu-0.1.10 lib/ffi-icu/uchar.rb
ffi-icu-0.1.9 lib/ffi-icu/uchar.rb
ffi-icu-0.1.8 lib/ffi-icu/uchar.rb
ffi-icu-0.1.7 lib/ffi-icu/uchar.rb