Машина 3m предназначена для проведения только базовых операций с деревьями, такими как создание дерева, добавление элемента, удаление элемемнта из дерева, присоединение атрибута к узлу дерева элементов, удаление атрибутов, ... Более сложные операции могут быть реализованы на ней с использованием этих команд.
Машина 3m.v1 позволяет работать с памятью размером до 4 Гб. Память машины устроена следующим образом:
Version | 1 байт | |
Length of length (lol) | 1 байт | Размер указателя памяти машины |
Tree size lol (treeszlol) | 1 байт | Размер поля номера узла дерева |
Flag size lol (flaglol) | 1 байт | Размер поля атрибутов узла дерева |
Tree count(tcount) | (lol) байт | Количество деревьев в файле памяти |
Tree refs | (tcount)*(lol) байт | Массив ссылок на деревья |
Current memory (curmem) | (lol) байт | Ссылка на текущую память машины |
Swap memory (altmem) | (lol) байт | Ссылка на альтернативную память машины |
Swap size | (lol) байт | Размер памяти curmem и altmem |
Основная память имеет сегментную организацию. Сегмент имеет следующую структуру:
Любая структура данных машины хранится в сегментах. Структуры данных машины:
Node count | (treeszlol) байт | количество узлов в дереве |
Capacity | (treeszlol) байт | количество узлов в дереве |
Atribute reference | (lol) байт | ссылка на таблицу атрибутов дерева |
Root number | (treeszlol) байт | номер корня |
Node list | (node count)*(nodesz) байт | список узлов дерева |
Поля обязательных заголовков | ||
Node number | (treeszlol) байт | номер узла |
Reverse hash | (treeszlol) байт | поле обратного разрешения номера узла |
Parent | (treeszlol) байт | номер узла родителя |
Flags | (flaglol) байт | поле флагов узла(отвечает за счетчик ссылок и удален/не удален) |
Atribute table ref | (treeszlol) байт | номер в таблице атрибутов с которого начинаются атрибуты узла |
Поля необязательных заголовков | ||
Left child | (treeszlol) байт | номер левого потомка |
Right brother | (treeszlol) байт | номер правого брата |
Child count | (treeszlol) байт | количество прямых потомков |
AllChild count | (treeszlol) байт | Общее количество потомков |
Состоит из Паскалевских строк длиной не более 255 байт. Представляет из себя последовательность строк, 0 - отсутствие строки и место, куда добавляется новая строка
Структуры, находящиеся в текущей памяти могут иметь сильную фрагментацию из-за постоянных процедур добвления.удаления элементов. Для устранения этой проблемы, а также для расширения базовых размеров структур используется сборка мусора копированием. Эта процедура копирует все валидные структуры из текущей памяти в альтернативную с расширением их размеров. Если памяти не хватает, то выходит ошибка. После копирования текущая и альтернативная памяти меняются местами.