Class: ICU::UCharPointer

Inherits:
FFI::MemoryPointer
  • Object
show all
Defined in:
lib/ffi-icu/uchar.rb

Constant Summary collapse

UCHAR_TYPE =

not sure how platform-dependent this is..

:uint16
TYPE_SIZE =
FFI.type_size(UCHAR_TYPE)

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(size) ⇒ UCharPointer

Returns a new instance of UCharPointer.



27
28
29
# File 'lib/ffi-icu/uchar.rb', line 27

def initialize(size)
  super UCHAR_TYPE, size
end

Class Method Details

.from_string(str, capacity = nil) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/ffi-icu/uchar.rb', line 7

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

  if capacity
    capacity *= TYPE_SIZE
    if capacity < bytes.size
      raise ArgumentError, "capacity is too small for string of #{bytes.size} bytes"
    end

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

  ptr.write_array_of_uint16 bytes

  ptr
end

Instance Method Details

#resized_to(new_size) ⇒ Object



31
32
33
34
35
36
37
38
# File 'lib/ffi-icu/uchar.rb', line 31

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

#string(length = nil) ⇒ Object



40
41
42
43
44
45
# File 'lib/ffi-icu/uchar.rb', line 40

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

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