Sha256: cb6191d1dc9c45dc470bc07a8d46f3c5922fb2121a5f5b258d05c315629477e4
Contents?: true
Size: 1.05 KB
Versions: 4
Compression:
Stored size: 1.05 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 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 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
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
ffi-icu-0.1.6 | lib/ffi-icu/uchar.rb |
ffi-icu-0.1.5 | lib/ffi-icu/uchar.rb |
ffi-icu-0.1.4 | lib/ffi-icu/uchar.rb |
ffi-icu-0.1.3 | lib/ffi-icu/uchar.rb |