1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- /*
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
- #include "stubs.h"
- #include <react/core/LayoutableShadowNode.h>
- #include <react/core/ShadowNodeFragment.h>
- #include <react/mounting/Differentiator.h>
- namespace facebook {
- namespace react {
- /*
- * Generates `create` and `insert` instructions recursively traversing a shadow
- * tree.
- * This is a trivial implementation of diffing algorithm that can only "diff"
- * an empty tree with some other one.
- */
- static void calculateShadowViewMutationsForNewTree(
- ShadowViewMutation::List &mutations,
- ShadowView const &parentShadowView,
- ShadowViewNodePair::List const &newChildPairs) {
- for (auto index = 0; index < newChildPairs.size(); index++) {
- auto const &newChildPair = newChildPairs[index];
- mutations.push_back(
- ShadowViewMutation::CreateMutation(newChildPair.shadowView));
- mutations.push_back(ShadowViewMutation::InsertMutation(
- parentShadowView, newChildPair.shadowView, index));
- auto const newGrandChildPairs =
- sliceChildShadowNodeViewPairs(*newChildPair.shadowNode);
- calculateShadowViewMutationsForNewTree(
- mutations, newChildPair.shadowView, newGrandChildPairs);
- }
- }
- StubViewTree stubViewTreeFromShadowNode(ShadowNode const &rootShadowNode) {
- auto mutations = ShadowViewMutation::List{};
- mutations.reserve(256);
- calculateShadowViewMutationsForNewTree(
- mutations,
- ShadowView(rootShadowNode),
- sliceChildShadowNodeViewPairs(rootShadowNode));
- auto emptyRootShadowNode = rootShadowNode.clone(
- ShadowNodeFragment{ShadowNodeFragment::propsPlaceholder(),
- ShadowNode::emptySharedShadowNodeSharedList()});
- auto stubViewTree = StubViewTree(ShadowView(*emptyRootShadowNode));
- stubViewTree.mutate(mutations);
- return stubViewTree;
- }
- } // namespace react
- } // namespace facebook
|