core :: FlatText :: char_to_byte_index
index
in _items
# Index of the character `index` in `_items`
fun char_to_byte_index(index: Int): Int do
var dpos = index - _position
var b = _bytepos
var its = _items
if dpos == 1 then
if its[b] & 0x80 == 0x00 then
b += 1
else
b += its.length_of_char_at(b)
end
_bytepos = b
_position = index
return b
end
if dpos == -1 then
b = its.find_beginning_of_char_at(b - 1)
_bytepos = b
_position = index
return b
end
if dpos == 0 then return b
var ln = _length
var pos = _position
# Find best insertion point
var delta_begin = index
var delta_end = (ln - 1) - index
var delta_cache = (pos - index).abs
var min = delta_begin
if delta_cache < min then min = delta_cache
if delta_end < min then min = delta_end
var ns_i: Int
var my_i: Int
if min == delta_cache then
ns_i = _bytepos
my_i = pos
else if min == delta_begin then
ns_i = first_byte
my_i = 0
else
ns_i = its.find_beginning_of_char_at(last_byte)
my_i = _length - 1
end
ns_i = its.char_to_byte_index_cached(index, my_i, ns_i)
_position = index
_bytepos = ns_i
return ns_i
end
lib/core/text/flat.nit:51,2--106,4
redef fun char_to_byte_index(index) do
var ln = length
assert index >= 0
assert index < ln
# Find best insertion point
var delta_begin = index
var delta_end = (ln - 1) - index
var delta_cache = (position - index).abs
var min = delta_begin
var its = items
if delta_cache < min then min = delta_cache
if delta_end < min then min = delta_end
var ns_i: Int
var my_i: Int
if min == delta_begin then
ns_i = first_byte
my_i = 0
else if min == delta_cache then
ns_i = bytepos
my_i = position
else
ns_i = its.find_beginning_of_char_at(last_byte)
my_i = length - 1
end
var from = ns_i
ns_i = its.char_to_byte_index_cached(index, my_i, ns_i)
var after = ns_i
sys.index_len.inc((after - from).abs)
position = index
bytepos = ns_i
return ns_i
end
lib/text_stat/text_stat.nit:171,2--212,4
redef fun char_to_byte_index(i) do
sys.index_call.inc "FlatString"
return super
end
lib/text_stat/text_stat.nit:324,2--327,4
redef fun char_to_byte_index(i) do
sys.index_call.inc "FlatBuffer"
return super
end
lib/text_stat/text_stat.nit:256,2--259,4
redef fun char_to_byte_index(index) do return index + _first_byte
lib/core/text/flat.nit:726,2--66