AreaStore

## Описание

Структура данных с быстрым доступом для хранения областей и поиска рядом с заданным положением или областью.
Каждая область имеет строковый атрибут `data` для хранения дополнительной информации.
Может быть получена функцией `AreaStore()` или `AreaStore(type_name)`.
Если выбран конструктор без параметров, то они будут выбраны автоматически.

## Методы

```
unknown | nil = area:get_area(number id[, boolean include_borders, boolean include_data])

```

Возвращает область по `id`.

Необязательные параметры `include_borders` и `include_data` управляют получаемыми данными.

Возвращает `nil`, если указанный идентификатор области не существует.

```
unknown = area:get_areas_for_pos(Position pos[, boolean include_borders, boolean include_data])

```

Возвращает все области, которые содержат позицию `pos`.

Необязательные параметры `include_borders` и `include_data` управляют получаемыми данными.

```
unknown = area:get_areas_in_area(Position edge1, Position edge2, boolean accept_overlap[, boolean include_borders, boolean include_data])

```

Возвращает все области, содержащие все узлы из обасти от `edge1` до `edge2` (включительно).

Необязательные параметры `include_borders` и `include_data` управляют получаемыми данными.

Если значение `accept_overlap` равно `true`, будут возвращены также области с узлами, общими с указанной областью.

```
number | nil = area:insert_area(Position edge1, Position edge2, string data[, number id])

```

Вставляет в хранилище область, описанную координатами `edge1` и `edge2` (включительно).

Возвращает идентификатор новой области или значение `nil` при сбое вставки.

`data` — строка с дополнительной информацией, хранящаяся в области.

Если передано, `id` будет использоваться как внутренний идентификатор области; он должен быть уникальным числом от 0 до 232-2; если вы используете параметр `id`, то его необходимо использовать всегда, иначе операции вставки могут завершиться ошибкой из-за конфликтов.

```
unknown = area:reserve(number count)

```

Резервирует ресурсы для хранения не более `count` областей.

Нужно только для увеличения эффективности, и только некоторые реализации полезны.

```
boolean  = area:remove_area(number id)

```

Удаляет область с заданным `id` из хранилища.

Возвращает `true` в случае успеха, и `false` — если нет области с таким `id`.

```
unknown = area:set_cache_params(table params)

```

Устанавливает параметры для включённого кэша предварительного фильтрования.

Вызов аннулирует кэш, так что его элементы должны быть недавно сгенерированны.

`params` — это таблица со следующими полями:

* `boolean enabled = true` -- состояние (вкл./выкл.);
* `number block_radius = 64` -- целочисленный радиус (в узлах) областей, для которых кэш создает предварительно отфильтрованные списки (минимум — 16);
* `number limit = 1000` -- целочисленный размер кэша (минимум — 20).

```
string  = area:to_string()

```

**Экспериментально**.

Возвращает сериализцию как (двоичную) строку.

```
unknown = area:to_file(string filename)

```

**Экспериментально**.

То же, что и `area:to_string` но записывает данные в файл.

```
boolean  = area:from_string(string str)

```

**Экспериментально**.

Десериализует строку `str` и загружает её в **AreaStore**.

Возвращает `true` в случае успеха, или сообщение об ошибке.

```
boolean  = area:from_file(string filename)

```

**Экспериментально**.

То же, что и `area:from_string` но читает данные из файла.