Это старая версия документа!
Оперирование
Более новый и функциональный способ оперировать над Цепями через процесс, называемый оперирование (operating).
Написание кода в C++
Использование лямбда-выражений
Можно легко оперировать над Цепями через C++ лямбды и вот как следует это делать:
Chain->Operate([](const FChain::FCursor& Cursor, FMyTrait Trait)
{
...
});
Тип курсора должен соответствовать типу использованной цепи (твердотельность/текучесть). Обратите внимание, что вам не позволяется получать ссылку на трейт, если вы итерируетесь по не-твердотельной цепи, - разрешено только копирование. Итак, оперировать над твердотельной Цепью вам следует следующим образом:
SolidChain->Operate([](const FSolidChain::FCursor& Cursor, FMyTrait& Trait)
{
...
});
Теперь можете менять свойства (поля) трейта напрямую, без привлечения копирования.
Параллельность
Твердотельные цепи также поддерживают специальный тип оперирования - мультипоточный.
К названию функции, которую надо вызвать, по такому случаю подписали Concurrently, и она принимает ещё два аргумента:
- максимальное количество потоков, выделенных на выполнение задачи, и
- минимальное число слотов на каждый поток.
Например:
SolidChain->OperateConcurrently([](const FSolidChain::FCursor& Cursor, FMyTrait& Trait)
{
...
}, 4, 32);
Второй параметр помогает ограничить количество потоков. Если слишком мало доступных слотов, излишние потоки не понадобятся и они не будут помещены в очередь.