Работа с дополнительной памятью
Описание
ЕРМ переменные статичны и ограничены в количестве. Статичность приводит к невозможности организовывать динамические структуры данных (например, списки), для которых нужны функции выделения и освобождения памяти, а ограниченное количество ведёт к необходимости строгого учёта индексов без возможности выйти за их пределы. Более того, ЕРМ строки в виде z-переменных занимают ровно 512 байт каждая в независимости от размера их содержимого. Эра предоставляет программисту до 2 млрд. слотов под массивы новых переменных (числовых или строковых). Размер массивов может изменяться средствами ЕРМ. Поскольку работа с динамическими структурами предполагает автоматическое выделение номеров слотов, то такая возможность присутствует. Слоты с положительными индексами принадлежат пользователю, а с отрицательными используются при автовыделении памяти.
Удаление слота памяти
- !!SN:M[номер слота, начиная с 0];
Пример:
Получение/установка размера слота
- !!SN:M[номер слота]/[?][количество элементов];
Размер слота — это количество элементов в массиве. Команда возвращает -1, если слот не существует.
Пример:
Работа со значениями элементов слотов
- !!SN:M[номер слота]/[номер элемента, начиная с 0]/[?][значение];
Пример:
- !!SN:M1/3;
- !!SN:M1/0/111 M1/1/222 M1/2/333;
- !!SN:M1/1/?y5;
- !!IF:M^%Y5^;
Получение адреса элемента слота
- !!SN:M[номер слота]/?[адрес элемента]/[номер элемента];
При удалении слота или изменении его размера, — адрес станет недействительным!
Пример:
Создание нового слота
- !!SN:M[номер слота]/[количество элементов]/[тип элементов]/[запоминать ли значения в сохранёнках];
Старое содержимое слота (если оно было), уничтожается.
*номер слота* — "-1" для автовыделения свободного номера и помещения его в v1.
*тип элементов*:
- 0 (число)
- 1 (строка)
*запоминать ли значения в сохранёнках*
- 0 (нет, при загрузке игры содержимое элементов будет представлять собой случайный мусор)
- 1 (да, содержимое нужно сохранять как есть)
При 0 экономится место в файле и возрастает скорость сохранения.
Пример:
- !!SN:M0/4/1/1;
- !!SN:M0/2/^привет^;
- !!SN:M0/3/^мир^;
- !!SN:M0/2/?z1 M0/3/?z2;
- !!IF:M^%Z1 %Z2^;
- !!SN:M0;
- !!SN:M-1/0/0/0;
- !!VRy1:S1 R6;
- !!SN:Mv1/y1;
- !!VRy1:-1;
- !!SN:Mv1/y1/777;