core :: FlatText :: defaultinit
# All kinds of array-based text representations.
abstract class FlatText
super Text
# Underlying CString (`char*`)
#
# Warning: Might be void in some subclasses, be sure to check
# if set before using it.
var items: CString is noinit
# Returns a char* starting at position `first_byte`
#
# WARNING: If you choose to use this service, be careful of the following.
#
# Strings and CString are *ideally* always allocated through a Garbage Collector.
# Since the GC tracks the use of the pointer for the beginning of the char*, it may be
# deallocated at any moment, rendering the pointer returned by this function invalid.
# Any access to freed memory may very likely cause undefined behaviour or a crash.
# (Failure to do so will most certainly result in long and painful debugging hours)
#
# The only safe use of this pointer is if it is ephemeral (e.g. read in a C function
# then immediately return).
#
# As always, do not modify the content of the String in C code, if this is what you want
# copy locally the char* as Nit Strings are immutable.
fun fast_cstring: CString is abstract
redef var length = 0
redef var byte_length = 0
redef fun output
do
var i = 0
while i < length do
items[i].output
i += 1
end
end
redef fun copy_to_native(dest, n, src_offset, dest_offset) do
items.copy_to(dest, n, src_offset, dest_offset)
end
end
lib/core/text/abstract_text.nit:1400,1--1443,3