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.



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

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
# 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
  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

Instance Method Details

#length_in_ucharsObject



46
47
48
# File 'lib/ffi-icu/uchar.rb', line 46

def length_in_uchars
  size / type_size
end

#resized_to(new_size) ⇒ Object



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

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



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

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

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