Files
react-native/packages/react-native/ReactCommon/react/renderer/element/ComponentBuilder.h
T
Nick Gerleman d2e91599c8 PointerAlignment: Left
Summary:
This changes Clang format config to enforce left pointer alignment instead of right, in accordance with https://www.internalfb.com/intern/wiki/Cpp/CppStyle/

Changelog: [Internal]

bypass-github-export-checks

Reviewed By: sammy-SC

Differential Revision: D48952040

fbshipit-source-id: 108329b2f11d2041a31dee3334c7801d69a3f1ad
2023-09-04 10:55:18 -07:00

57 lines
1.6 KiB
C++

/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#pragma once
#include <memory>
#include <react/renderer/componentregistry/ComponentDescriptorRegistry.h>
#include <react/renderer/core/ComponentDescriptor.h>
#include <react/renderer/core/ShadowNode.h>
#include <react/renderer/core/ShadowNodeFragment.h>
#include <react/renderer/element/Element.h>
#include <react/renderer/element/ElementFragment.h>
namespace facebook::react {
/*
* Build `ShadowNode` trees with a given given `Element` trees.
*/
class ComponentBuilder final {
public:
ComponentBuilder(
ComponentDescriptorRegistry::Shared componentDescriptorRegistry);
/*
* Copyable and movable.
*/
ComponentBuilder(const ComponentBuilder& componentBuilder) = default;
ComponentBuilder(ComponentBuilder&& componentBuilder) noexcept = default;
ComponentBuilder& operator=(const ComponentBuilder& other) = default;
ComponentBuilder& operator=(ComponentBuilder&& other) = default;
/*
* Builds a `ShadowNode` tree with given `Element` tree using stored
* `ComponentDescriptorRegistry`.
*/
template <typename ShadowNodeT>
std::shared_ptr<ShadowNodeT> build(Element<ShadowNodeT> element) const {
return std::static_pointer_cast<ShadowNodeT>(build(element.fragment_));
}
private:
/*
* Internal, type-erased version of `build`.
*/
ShadowNode::Unshared build(const ElementFragment& elementFragment) const;
ComponentDescriptorRegistry::Shared componentDescriptorRegistry_;
};
} // namespace facebook::react