Module: CArray::StringOperationMixin
- Included in:
- CAConstString, CAFixlenString, CAString
- Defined in:
- lib/carray/string_operation_extension.rb
Overview
String-array operations, mixed into the String Faces (CAConstString / CAFixlenString / CAString) — not into CArray itself, so numeric arrays carry no string methods.
Dispatch tiers: L1 (here) generic per-cell implementation. Reads each cell through the Face's scalar fetch (so CAConstString / CAFixlenString / CAString all yield a proper Ruby String), applies the operation, and builds a shape+mask-preserving output. L3 a Face may override any method with a byte-level C-native version (CAConstString already does for the byte predicates / search / comparison). Ruby method resolution puts the Face's own method ahead of this module, so an override simply wins; anything not overridden falls back to L1.
Output by return category (Option alpha): String result -> CAString (mutable object-backed String array). Chain #to_const_string / #to_fixlen_string to re-compact. Integer result -> :int CArray Boolean result -> :boolean CArray
Defined Under Namespace
Modules: Mutable
Instance Method Summary collapse
-
#bytesize ⇒ CArray
Per-cell
String#bytesize. -
#capitalize ⇒ CAString
Per-cell
String#capitalize. -
#center(*a) ⇒ CAString
Per-cell
String#center. -
#chomp(*a) ⇒ CAString
Per-cell
String#chomp. -
#delete_prefix(p) ⇒ CAString
Per-cell
String#delete_prefix. -
#delete_suffix(p) ⇒ CAString
Per-cell
String#delete_suffix. -
#downcase ⇒ CAString
Per-cell
String#downcase. -
#encode(*a) ⇒ CAString
Per-cell
String#encode. -
#end_with?(*a) ⇒ CArray
Per-cell
String#end_with?. -
#extract(regexp, replace = '\0') ⇒ CAString
Returns a CArray whose cells are each cell's first match of
regexptransformed byString#sub(regexp, replace); non-matching cells become"". -
#force_encoding(e) ⇒ CAString
Per-cell
String#force_encoding. -
#gsub(*a, &b) ⇒ CAString
Per-cell
String#gsub. -
#in?(*strings) ⇒ CArray
Returns a boolean CArray marking every cell whose value equals one of
strings(set membership). -
#include?(sub) ⇒ CArray
Per-cell
String#include?. -
#ljust(*a) ⇒ CAString
Per-cell
String#ljust. -
#lstrip ⇒ CAString
Per-cell
String#lstrip. -
#match?(re) ⇒ CArray
Per-cell
String#match?. -
#rindex(*a) ⇒ CArray
Per-cell
String#rindex. -
#rjust(*a) ⇒ CAString
Per-cell
String#rjust. -
#rstrip ⇒ CAString
Per-cell
String#rstrip. -
#scrub ⇒ CAString
Per-cell
String#scrub. -
#start_with?(*a) ⇒ CArray
Per-cell
String#start_with?. -
#str_index(*a) ⇒ CArray
Per-cell
String#index. -
#str_len ⇒ CArray
Per-cell
String#length. -
#strip ⇒ CAString
Per-cell
String#strip. -
#swapcase ⇒ CAString
Per-cell
String#swapcase. -
#to_const_string(encoding: Encoding::UTF_8) ⇒ CAConstString
Self (zero-copy) when already a CAConstString of the same encoding; otherwise materialises a compact column.
-
#to_f ⇒ CArray
Per-cell
String#to_f. - #to_fixlen_string(bytes: nil, truncate: :error) ⇒ CAFixlenString
-
#to_i ⇒ CArray
Per-cell
String#to_i. - #to_string ⇒ CAString
-
#upcase ⇒ CAString
Per-cell
String#upcase.
Instance Method Details
#bytesize ⇒ CArray
Per-cell String#bytesize.
125 |
# File 'lib/carray/string_operation_extension.rb', line 125 def bytesize () ; string_map(:int) { |s| s.bytesize } ; end |
#capitalize ⇒ CAString
Per-cell String#capitalize.
54 |
# File 'lib/carray/string_operation_extension.rb', line 54 def capitalize () ; string_map { |s| s.capitalize } ; end |
#center(*a) ⇒ CAString
Per-cell String#center.
81 |
# File 'lib/carray/string_operation_extension.rb', line 81 def center (*a) ; string_map { |s| s.center(*a) } ; end |
#chomp(*a) ⇒ CAString
Per-cell String#chomp.
69 |
# File 'lib/carray/string_operation_extension.rb', line 69 def chomp (*a) ; string_map { |s| s.chomp(*a) } ; end |
#delete_prefix(p) ⇒ CAString
Per-cell String#delete_prefix.
75 |
# File 'lib/carray/string_operation_extension.rb', line 75 def delete_prefix (p) ; string_map { |s| s.delete_prefix(p) } ; end |
#delete_suffix(p) ⇒ CAString
Per-cell String#delete_suffix.
78 |
# File 'lib/carray/string_operation_extension.rb', line 78 def delete_suffix (p) ; string_map { |s| s.delete_suffix(p) } ; end |
#downcase ⇒ CAString
Per-cell String#downcase.
51 |
# File 'lib/carray/string_operation_extension.rb', line 51 def downcase () ; string_map { |s| s.downcase } ; end |
#encode(*a) ⇒ CAString
Per-cell String#encode.
90 |
# File 'lib/carray/string_operation_extension.rb', line 90 def encode (*a) ; string_map { |s| s.encode(*a) } ; end |
#end_with?(*a) ⇒ CArray
Per-cell String#end_with?.
107 |
# File 'lib/carray/string_operation_extension.rb', line 107 def end_with? (*a) ; string_map(:boolean) { |s| s.end_with?(*a) } ; end |
#extract(regexp, replace = '\0') ⇒ CAString
161 162 163 |
# File 'lib/carray/string_operation_extension.rb', line 161 def extract (regexp, replace = '\0') string_map { |s| regexp.match(s) { |m| m[0].sub(regexp, replace) } || "" } end |
#force_encoding(e) ⇒ CAString
Per-cell String#force_encoding.
93 |
# File 'lib/carray/string_operation_extension.rb', line 93 def force_encoding (e) ; string_map { |s| s.force_encoding(e) } ; end |
#gsub(*a, &b) ⇒ CAString
Per-cell String#gsub.
72 |
# File 'lib/carray/string_operation_extension.rb', line 72 def gsub (*a, &b) ; string_map { |s| s.gsub(*a, &b) } ; end |
#in?(*strings) ⇒ CArray
150 151 152 |
# File 'lib/carray/string_operation_extension.rb', line 150 def in? (*strings) string_map(:boolean) { |s| strings.include?(s) } end |
#include?(sub) ⇒ CArray
Per-cell String#include?.
110 |
# File 'lib/carray/string_operation_extension.rb', line 110 def include? (sub) ; string_map(:boolean) { |s| s.include?(sub) } ; end |
#ljust(*a) ⇒ CAString
Per-cell String#ljust.
84 |
# File 'lib/carray/string_operation_extension.rb', line 84 def ljust (*a) ; string_map { |s| s.ljust(*a) } ; end |
#lstrip ⇒ CAString
Per-cell String#lstrip.
63 |
# File 'lib/carray/string_operation_extension.rb', line 63 def lstrip () ; string_map { |s| s.lstrip } ; end |
#match?(re) ⇒ CArray
Per-cell String#match?.
113 |
# File 'lib/carray/string_operation_extension.rb', line 113 def match? (re) ; string_map(:boolean) { |s| s.match?(re) } ; end |
#rindex(*a) ⇒ CArray
Per-cell String#rindex.
131 |
# File 'lib/carray/string_operation_extension.rb', line 131 def rindex (*a) ; string_map(:int) { |s| s.rindex(*a) } ; end |
#rjust(*a) ⇒ CAString
Per-cell String#rjust.
87 |
# File 'lib/carray/string_operation_extension.rb', line 87 def rjust (*a) ; string_map { |s| s.rjust(*a) } ; end |
#rstrip ⇒ CAString
Per-cell String#rstrip.
66 |
# File 'lib/carray/string_operation_extension.rb', line 66 def rstrip () ; string_map { |s| s.rstrip } ; end |
#scrub ⇒ CAString
Per-cell String#scrub.
96 |
# File 'lib/carray/string_operation_extension.rb', line 96 def scrub () ; string_map { |s| s.scrub } ; end |
#start_with?(*a) ⇒ CArray
Per-cell String#start_with?.
104 |
# File 'lib/carray/string_operation_extension.rb', line 104 def start_with? (*a) ; string_map(:boolean) { |s| s.start_with?(*a) } ; end |
#str_index(*a) ⇒ CArray
Per-cell String#index.
128 |
# File 'lib/carray/string_operation_extension.rb', line 128 def str_index (*a) ; string_map(:int) { |s| s.index(*a) } ; end |
#str_len ⇒ CArray
Per-cell String#length.
122 |
# File 'lib/carray/string_operation_extension.rb', line 122 def str_len () ; string_map(:int) { |s| s.length } ; end |
#strip ⇒ CAString
Per-cell String#strip.
60 |
# File 'lib/carray/string_operation_extension.rb', line 60 def strip () ; string_map { |s| s.strip } ; end |
#swapcase ⇒ CAString
Per-cell String#swapcase.
57 |
# File 'lib/carray/string_operation_extension.rb', line 57 def swapcase () ; string_map { |s| s.swapcase } ; end |
#to_const_string(encoding: Encoding::UTF_8) ⇒ CAConstString
Self (zero-copy) when already a CAConstString of the same encoding; otherwise materialises a compact column.
222 223 224 225 226 227 228 229 230 231 232 233 |
# File 'lib/carray/string_operation_extension.rb', line 222 def to_const_string (encoding: Encoding::UTF_8) if is_a?(CAConstString) && encoding == self.encoding return self end if has_mask? m = is_masked values = Array.new(elements) { |i| m[i] ? nil : self[i] } else values = Array.new(elements) { |i| self[i] } end CArray.const_string(values, encoding: encoding) end |
#to_f ⇒ CArray
Per-cell String#to_f.
140 |
# File 'lib/carray/string_operation_extension.rb', line 140 def to_f () ; string_map(:float64) { |s| s.to_f } ; end |
#to_fixlen_string(bytes: nil, truncate: :error) ⇒ CAFixlenString
189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 |
# File 'lib/carray/string_operation_extension.rb', line 189 def to_fixlen_string (bytes: nil, truncate: :error) unless [:error, :silent].include?(truncate) raise ArgumentError, "truncate: must be :error or :silent (got #{truncate.inspect})" end return self if is_a?(CAFixlenString) && (bytes.nil? || bytes == self.bytes) if has_mask? m = is_masked values = Array.new(elements) { |i| m[i] ? nil : self[i].to_s } else values = Array.new(elements) { |i| self[i].to_s } end width = bytes || values.compact.map(&:bytesize).max || 1 width = 1 if width < 1 if truncate == :error values.each_with_index do |s, i| next if s.nil? if s.bytesize > width raise ArgumentError, "to_fixlen_string: value at #{i} is #{s.bytesize} bytes, exceeds slot width #{width} " \ "(use truncate: :silent to keep the leading bytes)" end end end entity = CArray.new(CA_FIXLEN, shape, :bytes => width) values.each_with_index { |s, i| entity[i] = s.nil? ? UNDEF : s } CAFixlenString.wrap(entity) end |
#to_i ⇒ CArray
Per-cell String#to_i.
137 |
# File 'lib/carray/string_operation_extension.rb', line 137 def to_i () ; string_map(:int) { |s| s.to_i } ; end |
#to_string ⇒ CAString
174 175 176 177 178 179 180 181 182 183 184 |
# File 'lib/carray/string_operation_extension.rb', line 174 def to_string return self if is_a?(CAString) entity = CArray.object(*shape) if has_mask? m = is_masked elements.times { |i| entity[i] = (m[i] ? UNDEF : self[i]) } else elements.times { |i| entity[i] = self[i] } end CAString.wrap(entity) end |
#upcase ⇒ CAString
Per-cell String#upcase.
48 |
# File 'lib/carray/string_operation_extension.rb', line 48 def upcase () ; string_map { |s| s.upcase } ; end |