Non-breaking const-correctness fixes (#1365)
Summary: Pull Request resolved: https://github.com/facebook/yoga/pull/1365 X-link: https://github.com/facebook/react-native/pull/39368 This changes public Yoga API to in more places accept const structures where before they required mutable ones. `resolveRef` is added as a quick way to resolve overloaded opaque refs for different types which is a bit easier to read than static_casting, and which will propagate const-ness. We also add `YGConfigConstRef`, similar to `YGNodeConstRef`. I was a bit iffy on whether we should add something to make it easier to convert to private interface, but this doesn't seem any easier to misuse than someone who looks at the internals to find the `static_cast`. This tries to avoid more breaking changes yet, e.g. changing callbacks to require clients do not modify nodes when they are passed for logging. We also don't have const variants for returning child structures which would allow mutation of dependencies of the const object. These would need new names under the public API, since we do not have operator overloading in C. Reviewed By: rshest Differential Revision: D49130412 fbshipit-source-id: ee6b31b47f4622031c63dd52d8ac133d21bf29b7
This commit is contained in:
committed by
Facebook GitHub Bot
parent
3cb29e60a8
commit
b12a6a340c
@@ -484,7 +484,14 @@ YOGA_EXPORT void Node::clearChildren() {
|
||||
// Other Methods
|
||||
|
||||
void Node::cloneChildrenIfNeeded(void* cloneContext) {
|
||||
iterChildrenAfterCloningIfNeeded([](Node*, void*) {}, cloneContext);
|
||||
int i = 0;
|
||||
for (Node*& child : children_) {
|
||||
if (child->getOwner() != this) {
|
||||
child = resolveRef(config_->cloneNode(child, this, i, cloneContext));
|
||||
child->setOwner(this);
|
||||
}
|
||||
i += 1;
|
||||
}
|
||||
}
|
||||
|
||||
void Node::markDirtyAndPropagate() {
|
||||
|
Reference in New Issue
Block a user