wiki:ru/AMF/InternalDataStructure

Version 1 (modified by vadim.godunko, 9 years ago) ( diff )

--

Структура внутренних данных

Внутренние данных организованы в виде таблиц данных. Это позволяет хранить данные компактно, легко анализировать фактическую структуру данных.

Логически выделяются два вида способов хранения значений атрибутов класса. Значения атрибутов, имеющие множественность [0..1] и [1..1] хранятся непосредственно в таблице элементов. Для коллекций примитивных типов в таблице элементов хранится только идентификатор коллекции, а сами данные коллекции хранятся в отдельных таблицах. Для коллекций элементов в таблице элементов хранится только один базовый идентификатор коллекции, идентификаторы остальных коллекций получаются из него путём прибавления фиксированного для каждого атрибута смещения. Сами коллекции элементов так же хранятся в отдельных таблицах. Важно отметить, что коллекция элементов со смещением ноль используется для управления теми связями, которые не формируют атрибутов элемента.

Распределение слотов/коллекций и внутренние подпрограммы получения/установки значений

Алгоритм распределения слотов/коллекций притерпел несколько серьёзных изменений. Ниже описывается очередной этап преобразования структуры распределения.

Атрибуты простых типов

Для простых типов (PrimitiveType, DataType, Enumeration) структура распределения предельно проста. Для каждого атрибута простого типа выдялется один слот таблицы элементов, в котором сохраняется значение атрибута (при верхней границе множественности 1) или же идентификатор коллекции простого типа (при верхней границе множественности более 1).

Если атрибут переопределяет значение некоторого атрибута одного из родительских классов, то такие атрибуты всегда используют один слот.

Внутренние подпрограммы получения/установки значения атрибутов получают имя по имени атрибута, поэтому все одноимённые атрибуты для которых неразличимы Ada подпрограммы внутренней установки/получения значения, группируются таким образом, что бы занимать одинакотовый слот у всех классов.

Атрибуты классовых типов

Атрибуты классовых типов имеют значительно более сложную структуру и их обработка требуют анализа множества дополнительных условий.

Для атрибутов с верхней границей множественности 1 в таблице элементов выделяется один слот для хранения идентификатора ссылки. Для атрибутов с верхней границей множественности более 1 выделяется непрерывный диапазон идентификаторов коллекций, а в таблице элементов хранится только идентификатор первой коллекции.

Note: See TracWiki for help on using the wiki.