(.idx) Simple index file |
В индексных файлах располагается одна запись заголовка
и одна или больше записей вершин. В записи заголовка
находится информация о корневой вершине, текущем размере
файла, длине ключа, особенностях индекса и сигнатура, а
также представление ключа в коде ASCII, которое можно
вывести на печать, и выражения FOR. Запись заголовка
начинается с нулевой позиции файла.
Во всех других записях вершин содержится атрибут,
количество существующих ключей и указатели на вершины,
располагающиеся слева и справа (на том же уровне) от данной
вершины. Помимо этого, в них находится группа символов,
представляющая значение ключа, и либо указатель на вершину
нижнего уровня, либо подлинный номер записи в базе данных.
Размер каждой записи, которая выведена в файл, равен 512
байтам.
В приведенных ниже таблицах показан пример упорядоченной структуры дерева.
Байты | Описание | ||||||
00 - 03 | Указатель на корневую вершину | ||||||
04 - 07 | Указатель на свободную в списке вершину (-1, если таковая отсутствует) | ||||||
08 - 11 | Указатель на конец файла (размер файла) | ||||||
12 - 13 | Длина ключа | ||||||
14 | Особенности индекса (любое из нижеследующих
числовых значений либо их сумма)
|
||||||
15 | Сигнатура индекса (для использования в будущем) | ||||||
16 - 235 | Ключевое выражение (не компилируется; до 220 символов) | ||||||
236 - 455 | Выражение FOR (не компилируется; до 220 символов, оканчивающееся пустым символом) | ||||||
456 - 511 | Не используются |
Байты | Описание | |||||||||
00 - 01 | Атрибуты вершины (любое из нижеследующих
числовых значений либо их сумма)
|
|||||||||
02 - 03 | Количество существующих ключей (0, 1 или больше) | |||||||||
04 - 07 | Указатель на вершину, расположенную непосредственно слева от данной вершины (на том же уровне; -1, если отсутствует) | |||||||||
08 - 11 | Указатель на вершину, расположенную непосредственно справа от данной вершины (на том же уровне; -1, если отсутствует) | |||||||||
12 - 511 | До 500 символов, включающих в себя значение ключа
для длины ключа с четырехбайтовым шестнадцатеричным
числом (хранящемся в обычном
формате слева направо): Если вершина является листом (атрибут = 02 или 03), тогда четыре байта содержат подлинный номер номер в базе данных в шестнадцатеричном формате - иначе 4 байта содержат внутрииндексный указатель. |
Поиск ключа в приведенной ниже структуре потребует
просмотра единственного пути между корневой вершиной и
листом. Вершины на самом нижнем уровне являются
вершинами-листьями. Так как ключи отсортированы, то все
ключи в поддереве меньше либо равны родительской вершине.
На приведенном выше рисунке в качестве значений ключей используются буквы. Обычно каждый ключ имеет четырехбайтовый шестнадцатеричный номер. Номера, соответствующие ключам в листьях, - это подлинные номера базы данных, все ключи в других вершинах - это внутрииндексные указатели, им соответствующие.
Байты 12-511 в записях индексных вершин могли бы
выглядеть следующим образом:
Комбинация из значения ключа и шестнадцатеричного
номера будет заноситься в байты 12-511 n раз, где n - число
существующих ключей.