// 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. #pragma once #include #include #include #include #include #include #include #include namespace facebook { namespace react { /* * Describes a view that can be mounted. */ struct ShadowView final { ShadowView() = default; ShadowView(ShadowView const &shadowView) = default; ShadowView(ShadowView &&shadowView) noexcept = default; /* * Constructs a `ShadowView` from given `ShadowNode`. */ explicit ShadowView(ShadowNode const &shadowNode); ShadowView &operator=(ShadowView const &other) = default; ShadowView &operator=(ShadowView &&other) = default; bool operator==(ShadowView const &rhs) const; bool operator!=(ShadowView const &rhs) const; ComponentName componentName{}; ComponentHandle componentHandle{}; Tag tag{}; Props::Shared props{}; EventEmitter::Shared eventEmitter{}; LayoutMetrics layoutMetrics{EmptyLayoutMetrics}; LocalData::Shared localData{}; State::Shared state{}; }; #if RN_DEBUG_STRING_CONVERTIBLE std::string getDebugName(ShadowView const &object); std::vector getDebugProps( ShadowView const &object, DebugStringConvertibleOptions options = {}); #endif /* * Describes pair of a `ShadowView` and a `ShadowNode`. */ struct ShadowViewNodePair final { using List = better:: small_vector; ShadowView shadowView; ShadowNode const *shadowNode; /* * The stored pointer to `ShadowNode` represents an indentity of the pair. */ bool operator==(const ShadowViewNodePair &rhs) const; bool operator!=(const ShadowViewNodePair &rhs) const; }; } // namespace react } // namespace facebook namespace std { template <> struct hash { size_t operator()(const facebook::react::ShadowView &shadowView) const { return folly::hash::hash_combine( 0, shadowView.componentHandle, shadowView.tag, shadowView.props, shadowView.eventEmitter, shadowView.localData, shadowView.state); } }; } // namespace std