Это Dynamic Data System для моей игры...
Искусственному интеллекту я объяснял на ~40 страницах А4, что это такое, как оно работает.
Поэтому вкратце:
1. Обобщение работы с данными, однородное хранение (через 8-байтовую переменную).
2. Кэширование результата (именованные поля в таблице данных).
3. Автокоррекция значения в таблице данных (обрезка).
4. Поддержка модификаторов (с сохранением исходного значения).
5. Вся архитектура подразумевает возможность работы на различных реализациях контейнеров (можно уложить данные в плоские массивы и сериализировать в "один клик").
В: Для чего?
Основная причина - возможность удаления модификаторов без влияния на остальную часть цепочки вычислений.
Реализация таблицы данных на std::unordered_map дала порядка ~300 мс на обработку 5'000'000 модификаторов. Перевод таблицы на std::vector выдал ~70 мс:
К слову, такой код:
занимает порядка 30 мс:
Поскольку это является частью логики (подразумевается серверное выполнение), вопрос производительности всё равно остаётся открытым, но тут присутствует важный нюанс. Данная архитектура предназначена для работы с кэш-возможными значениями. То есть, очевидно, она плохо подходит для реализации динамических объектов, которые (должны) меняют своё состояние на каждом тике. И вообще изначально разрабатывалась для пошаговой игры.
Пока просто воссоздал базовый фундамент системы. Далее необходимо реализовать полиморфизм сущностей, диспетчер сущностей, который позволит обрабатывать сущности независимо в многопоточном режиме, синтаксис инициализации, фундамент скриптового движка для нативной работы с таблицами данных (элементарные арифметические и операции управления).
Я на самом деле не знаю, насколько это круто...