ComponentKit/Core/CKComponentControllerHelper.mm (39 lines of code) (raw):

/* * Copyright (c) 2014-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * */ #import "CKComponentControllerHelper.h" #import <ComponentKit/CKComponentScopeRoot.h> namespace CKComponentControllerHelper { auto removedControllersFromPreviousScopeRootMatchingPredicate(CKComponentScopeRoot *newRoot, CKComponentScopeRoot *previousRoot, CKComponentControllerPredicate predicate) -> std::vector<CKComponentController *> { if (!previousRoot) { return {}; } const auto oldControllers = [previousRoot componentControllersMatchingPredicate:predicate]; const auto newControllers = [newRoot componentControllersMatchingPredicate:predicate]; const auto removedControllers = CK::Collection::difference(oldControllers, newControllers, [](const auto &lhs, const auto &rhs){ return lhs == rhs; }); return CK::map(removedControllers, [](const auto controller){ return (CKComponentController *)controller; }); } auto addedControllersFromPreviousScopeRootMatchingPredicate(CKComponentScopeRoot *newRoot, CKComponentScopeRoot *previousRoot, CKComponentControllerPredicate predicate) -> std::vector<CKComponentController *> { if (!newRoot) { return {}; } const auto newControllers = [newRoot componentControllersMatchingPredicate:predicate]; if (!previousRoot) { return CK::map(newControllers, [](const auto controller){ return (CKComponentController *)controller; }); } const auto oldControllers = [previousRoot componentControllersMatchingPredicate:predicate]; const auto addedControllers = CK::Collection::difference(newControllers, oldControllers, [](const auto &lhs, const auto &rhs){ return lhs == rhs; }); return CK::map(addedControllers, [](const auto controller){ return (CKComponentController *)controller; }); } };