diff --git a/packages/react-native/ReactCommon/react/renderer/components/text/ParagraphShadowNode.h b/packages/react-native/ReactCommon/react/renderer/components/text/ParagraphShadowNode.h index 91839534d37..224299bc255 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/text/ParagraphShadowNode.h +++ b/packages/react-native/ReactCommon/react/renderer/components/text/ParagraphShadowNode.h @@ -29,8 +29,7 @@ class ParagraphShadowNode final : public ConcreteViewShadowNode< ParagraphComponentName, ParagraphProps, ParagraphEventEmitter, - ParagraphState, - /* usesMapBufferForStateData */ true>, + ParagraphState>, public BaseTextShadowNode { public: using ConcreteViewShadowNode::ConcreteViewShadowNode; diff --git a/packages/react-native/ReactCommon/react/renderer/components/textinput/BaseTextInputShadowNode.h b/packages/react-native/ReactCommon/react/renderer/components/textinput/BaseTextInputShadowNode.h index 702b9f4aee8..ca450b3e0c6 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/textinput/BaseTextInputShadowNode.h +++ b/packages/react-native/ReactCommon/react/renderer/components/textinput/BaseTextInputShadowNode.h @@ -29,22 +29,19 @@ template < const char* concreteComponentName, typename ViewPropsT, typename ViewEventEmitterT, - typename StateDataT, - bool usesMapBufferForStateData = false> + typename StateDataT> class BaseTextInputShadowNode : public ConcreteViewShadowNode< concreteComponentName, ViewPropsT, ViewEventEmitterT, - StateDataT, - usesMapBufferForStateData>, + StateDataT>, public BaseTextShadowNode { public: using BaseShadowNode = ConcreteViewShadowNode< concreteComponentName, ViewPropsT, ViewEventEmitterT, - StateDataT, - usesMapBufferForStateData>; + StateDataT>; using BaseShadowNode::ConcreteViewShadowNode; diff --git a/packages/react-native/ReactCommon/react/renderer/components/textinput/platform/android/react/renderer/components/androidtextinput/AndroidTextInputShadowNode.h b/packages/react-native/ReactCommon/react/renderer/components/textinput/platform/android/react/renderer/components/androidtextinput/AndroidTextInputShadowNode.h index 33c5bc22dd9..e21e30c7bca 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/textinput/platform/android/react/renderer/components/androidtextinput/AndroidTextInputShadowNode.h +++ b/packages/react-native/ReactCommon/react/renderer/components/textinput/platform/android/react/renderer/components/androidtextinput/AndroidTextInputShadowNode.h @@ -22,13 +22,11 @@ extern const char AndroidTextInputComponentName[]; /* * `ShadowNode` for component. */ -class AndroidTextInputShadowNode final - : public ConcreteViewShadowNode< - AndroidTextInputComponentName, - AndroidTextInputProps, - AndroidTextInputEventEmitter, - TextInputState, - /* usesMapBufferForStateData */ true> { +class AndroidTextInputShadowNode final : public ConcreteViewShadowNode< + AndroidTextInputComponentName, + AndroidTextInputProps, + AndroidTextInputEventEmitter, + TextInputState> { public: using ConcreteViewShadowNode::ConcreteViewShadowNode; diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/ConcreteViewShadowNode.h b/packages/react-native/ReactCommon/react/renderer/components/view/ConcreteViewShadowNode.h index 9c028febde0..84c855c1059 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/ConcreteViewShadowNode.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/ConcreteViewShadowNode.h @@ -27,15 +27,13 @@ template < const char* concreteComponentName, typename ViewPropsT = ViewProps, typename ViewEventEmitterT = ViewEventEmitter, - typename StateDataT = StateData, - bool usesMapBufferForStateData = false> + typename StateDataT = StateData> class ConcreteViewShadowNode : public ConcreteShadowNode< concreteComponentName, YogaLayoutableShadowNode, ViewPropsT, ViewEventEmitterT, - StateDataT, - usesMapBufferForStateData> { + StateDataT> { static_assert( std::is_base_of::value, "ViewPropsT must be a descendant of ViewProps"); @@ -52,8 +50,7 @@ class ConcreteViewShadowNode : public ConcreteShadowNode< YogaLayoutableShadowNode, ViewPropsT, ViewEventEmitterT, - StateDataT, - usesMapBufferForStateData>; + StateDataT>; ConcreteViewShadowNode( const ShadowNodeFragment& fragment, diff --git a/packages/react-native/ReactCommon/react/renderer/core/ConcreteShadowNode.h b/packages/react-native/ReactCommon/react/renderer/core/ConcreteShadowNode.h index 684174a1586..4f3174c19a0 100644 --- a/packages/react-native/ReactCommon/react/renderer/core/ConcreteShadowNode.h +++ b/packages/react-native/ReactCommon/react/renderer/core/ConcreteShadowNode.h @@ -29,8 +29,7 @@ template < typename BaseShadowNodeT, typename PropsT, typename EventEmitterT = EventEmitter, - typename StateDataT = StateData, - bool usesMapBufferForStateData = false> + typename StateDataT = StateData> class ConcreteShadowNode : public BaseShadowNodeT { static_assert( std::is_base_of::value, @@ -52,7 +51,7 @@ class ConcreteShadowNode : public BaseShadowNodeT { using ConcreteEventEmitter = EventEmitterT; using SharedConcreteEventEmitter = std::shared_ptr; using SharedConcreteShadowNode = std::shared_ptr; - using ConcreteState = ConcreteState; + using ConcreteState = ConcreteState; using ConcreteStateData = StateDataT; static ComponentName Name() { diff --git a/packages/react-native/ReactCommon/react/renderer/core/ConcreteState.h b/packages/react-native/ReactCommon/react/renderer/core/ConcreteState.h index 46ac23f2fd8..1fab5de4940 100644 --- a/packages/react-native/ReactCommon/react/renderer/core/ConcreteState.h +++ b/packages/react-native/ReactCommon/react/renderer/core/ConcreteState.h @@ -20,13 +20,20 @@ namespace facebook::react { +#ifdef ANDROID +template +concept StateDataWithMapBuffer = requires(StateDataT stateData) { + { stateData.getMapBuffer() } -> std::same_as; +}; +#endif + /* * Concrete and only template implementation of State interface. * State wraps an arbitrary data type and provides an interface to initiate a * state update transaction. A data object does not need to be copyable but * needs to be moveable. */ -template +template class ConcreteState : public State { public: using Shared = std::shared_ptr; @@ -106,7 +113,7 @@ class ConcreteState : public State { } MapBuffer getMapBuffer() const override { - if constexpr (usesMapBufferForStateData) { + if constexpr (StateDataWithMapBuffer) { return getData().getMapBuffer(); } else { return MapBufferBuilder::EMPTY();