ru:toolworks:docs:apparatus:filter

Фильтры

Примеч.: деталь или трейт сущности или сущностного объекта в этой статье будем называть Part (Компонентом).

Фильтры предоставляют возможность сужать процесс итерирования (или оперирования) до сущностей и сущностных объектов, обладающих только заданными комбинациями компонентов. Спецификация фильтра представлена специальной структурой, называемой Filter. Фильтрация может быть как включающей (позитивной), так и исключающей (негативной). В Аппарате вы можете комбинировать любые типы компонентов, т.е. как трейты, так и детали могут быть одновременно использованы в одном фильтре.

Включение означает, что сущность (или сущностный объект) определённо должен содержать указанный компонент, чтобы фильтр отобрал её (его) для обработки механикой. Фильтр по включению для деталей поддерживает наследование, поэтому если вы активируете включение базового класса детали в фильтре, то детали-потомки указанной детали будут включены в обработку механикой.

Исключение означает противоположное. Сущность (или сущностный объект) должен не содержать в себе указанный компонент, чтобы фильтр её (его) отобрал для обработки механикой.

Оба указанных способа могут и должны быть использованы друг с другом. Помните, что Аппарат сильно оптимизирован для всех типов фильтров, он не выполняет поэтапный поиск, а использует быстрые процедуры сравнения масок. Грубо говоря, тестирование одного фильтра, состоящего из 100 деталей, будет таким же, как если бы он содержал в себе одну.

Вы создаёте инстанцию FFilter-а. Есть несколько разных конструкторов и методов, доступных для этой структуры, и вы можете использовать всё, что будет пригодно в конкретном случае. Например, давайте создадим фильтр одного трейта и одной детали:

FFilter MyFilter = FFilter::Make<UMyDetail, FMyTrait>();

Теперь вы можете использовать собранный фильтр, чтобы объединять в цепи ремни и чанки и итерироваться по ним.

  • ru/toolworks/docs/apparatus/filter.txt
  • Последнее изменение: 2022/01/05 15:13
  • jispar