Move reset logic to `YGNode::reset()`

Summary:
@public

Moving logic from free C functions to the C++ layer.

This will allow us to get rid of the dangerous copy / move assignment operators of `YGNode`.

Reviewed By: SidharthGuglani

Differential Revision: D14241564

fbshipit-source-id: aae9f2a7ffd23bb839f1747e4a0694578bae86ae
This commit is contained in:
David Aurelio 2019-02-28 06:22:17 -08:00 коммит произвёл Facebook Github Bot
Родитель 60640485e1
Коммит ce457faafc
3 изменённых файлов: 22 добавлений и 19 удалений

Просмотреть файл

@ -571,3 +571,22 @@ bool YGNode::isLayoutTreeEqualToNode(const YGNode& node) const {
}
return isLayoutTreeEqual;
}
void YGNode::reset() {
YGAssertWithNode(
this,
children_.size() == 0,
"Cannot reset a node which still has children attached");
YGAssertWithNode(
this, owner_ == nullptr, "Cannot reset a node still attached to a owner");
clearChildren();
auto config = getConfig();
*this = YGNode{};
if (config->useWebDefaults) {
setStyleFlexDirection(YGFlexDirectionRow);
setStyleAlignContent(YGAlignStretch);
}
setConfig(config);
}

Просмотреть файл

@ -342,4 +342,5 @@ public:
bool isNodeFlexible();
bool didUseLegacyFlag();
bool isLayoutTreeEqualToNode(const YGNode& node) const;
void reset();
};

Просмотреть файл

@ -323,25 +323,8 @@ void YGNodeFreeRecursive(const YGNodeRef root) {
return YGNodeFreeRecursiveWithCleanupFunc(root, nullptr);
}
void YGNodeReset(const YGNodeRef node) {
YGAssertWithNode(
node,
YGNodeGetChildCount(node) == 0,
"Cannot reset a node which still has children attached");
YGAssertWithNode(
node,
node->getOwner() == nullptr,
"Cannot reset a node still attached to a owner");
node->clearChildren();
const YGConfigRef config = node->getConfig();
*node = YGNode();
if (config->useWebDefaults) {
node->setStyleFlexDirection(YGFlexDirectionRow);
node->setStyleAlignContent(YGAlignStretch);
}
node->setConfig(config);
void YGNodeReset(YGNodeRef node) {
node->reset();
}
int32_t YGNodeGetInstanceCount(void) {