Spec-Zone.ru › Ruby 3.4

класс Prism::CodeUnitsCache

Родитель:
Объект

Кэш, который может использоваться для быстрого вычисления смещений кодовых единиц от байтовых смещений. Он намеренно предоставляет только один метод [] для доступа к кэшу, чтобы минимизировать поверхность.

Обратите внимание, что здесь есть некоторые известные проблемы, которые могут или не могут быть решены в будущем:

  • Первая проблема заключается в том, что возникают проблемы, когда кэш вычисляет значения, которые не находятся на границах символов. Это может привести к тому, что последующие вычисления будут отличаться на одну или несколько кодовых единиц.

  • Вторая проблема заключается в том, что этот кэш в настоящее время не ограничен. Теоретически мы могли бы ввести какой-либо кэш LRU для ограничения числа записей, но это пока не реализовано.

Публичные методы класса

new (source, encoding)
Исходный код
# File lib/prism/parse_result.rb, line 198
def initialize(source, encoding)
  @source = source
  @counter =
    if encoding == Encoding::UTF_16LE || encoding == Encoding::UTF_16BE
      UTF16Counter.new(source, encoding)
    else
      LengthCounter.new(source, encoding)
    end

  @cache = {} #: Hash[Integer, Integer]
  @offsets = [] #: Array[Integer]
end

Инициализирует новый кэш с заданным источником и кодировкой.

Публичные методы экземпляра

[] (byte_offset)
Исходный код
# File lib/prism/parse_result.rb, line 212
def [](byte_offset)
  @cache[byte_offset] ||=
    if (index = @offsets.bsearch_index { |offset| offset > byte_offset }).nil?
      @offsets << byte_offset
      @counter.count(0, byte_offset)
    elsif index == 0
      @offsets.unshift(byte_offset)
      @counter.count(0, byte_offset)
    else
      @offsets.insert(index, byte_offset)
      offset = @offsets[index - 1]
      @cache[offset] + @counter.count(offset, byte_offset - offset)
    end
end

Возвращает смещение кодовых единиц от заданного байтового смещения.

Ruby Core © 1993–2024 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API