mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-03-25 16:45:01 +08:00
Summary: `ShadowNodeFragment` is very cheap by design because it does not own stuff it contains, so it's great. But... sometimes we need to own the stuff (e.g. to pass it on the other thread), in those cases we can use `ShadowNodeFragment::Value` now. `ShadowNodeFragment::Value` cannot be used alone, it needs to be constructed from `ShadowNodeFragment` and then used as opaque object and then it can be converted to ``ShadowNodeFragment`. We will need it soon. Reviewed By: mdvacca Differential Revision: D15039136 fbshipit-source-id: d40875cac05f4088358d8d418007d17df9ff14f4
65 lines
1.6 KiB
C++
65 lines
1.6 KiB
C++
/**
|
|
* 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 "ShadowNodeFragment.h"
|
|
|
|
namespace facebook {
|
|
namespace react {
|
|
|
|
Tag const ShadowNodeFragment::tagPlaceholder() {
|
|
return 0;
|
|
}
|
|
|
|
SurfaceId const ShadowNodeFragment::surfaceIdPlaceholder() {
|
|
return 0;
|
|
}
|
|
|
|
Props::Shared const &ShadowNodeFragment::propsPlaceholder() {
|
|
static auto &instance = *new Props::Shared();
|
|
return instance;
|
|
}
|
|
|
|
EventEmitter::Shared const &ShadowNodeFragment::eventEmitterPlaceholder() {
|
|
static auto &instance = *new EventEmitter::Shared();
|
|
return instance;
|
|
}
|
|
|
|
ShadowNode::SharedListOfShared const &
|
|
ShadowNodeFragment::childrenPlaceholder() {
|
|
static auto &instance = *new ShadowNode::SharedListOfShared();
|
|
return instance;
|
|
}
|
|
|
|
LocalData::Shared const &ShadowNodeFragment::localDataPlaceholder() {
|
|
static auto &instance = *new LocalData::Shared();
|
|
return instance;
|
|
}
|
|
|
|
State::Shared const &ShadowNodeFragment::statePlaceholder() {
|
|
static auto &instance = *new State::Shared();
|
|
return instance;
|
|
}
|
|
|
|
using Value = ShadowNodeFragment::Value;
|
|
|
|
Value::Value(ShadowNodeFragment const &fragment)
|
|
: tag_(fragment.tag),
|
|
surfaceId_(fragment.surfaceId),
|
|
props_(fragment.props),
|
|
eventEmitter_(fragment.eventEmitter),
|
|
children_(fragment.children),
|
|
localData_(fragment.localData),
|
|
state_(fragment.state) {}
|
|
|
|
Value::operator ShadowNodeFragment() const {
|
|
return ShadowNodeFragment{
|
|
tag_, surfaceId_, props_, eventEmitter_, children_, localData_, state_};
|
|
}
|
|
|
|
} // namespace react
|
|
} // namespace facebook
|