Add hasErrata(), addErrata(), removeErrata()

Summary:
X-link: https://github.com/facebook/react-native/pull/37375

Adds internal helpers to YGConfig to make bit manipulation more readable. We also expose `hasErrata()` to YGNode beacuse checking that will be a common pattern. We intentionally don't add mutating functions to the node, since current model is to inval a node on commiting whole config.

This is not exposed via the C ABI.

Reviewed By: yungsters

Differential Revision: D45765971

fbshipit-source-id: eadaee4b9cf5204ac4984ecc52cc08650d144a30
This commit is contained in:
Nick Gerleman
2023-05-11 05:30:57 -07:00
committed by Facebook GitHub Bot
parent 3b088c3383
commit 9e1b14cd9e
4 changed files with 21 additions and 4 deletions

View File

@@ -59,10 +59,22 @@ void YGConfig::setErrata(YGErrata errata) {
errata_ = errata;
}
void YGConfig::addErrata(YGErrata errata) {
errata_ |= errata;
}
void YGConfig::removeErrata(YGErrata errata) {
errata_ &= (~errata);
}
YGErrata YGConfig::getErrata() const {
return errata_;
}
bool YGConfig::hasErrata(YGErrata errata) const {
return (errata_ & errata) != YGErrataNone;
}
void YGConfig::setPointScaleFactor(float pointScaleFactor) {
pointScaleFactor_ = pointScaleFactor;
}

View File

@@ -67,7 +67,10 @@ struct YOGA_EXPORT YGConfig {
facebook::yoga::ExperimentalFeatureSet getEnabledExperiments() const;
void setErrata(YGErrata errata);
void addErrata(YGErrata errata);
void removeErrata(YGErrata errata);
YGErrata getErrata() const;
bool hasErrata(YGErrata errata) const;
void setPointScaleFactor(float pointScaleFactor);
float getPointScaleFactor() const;

View File

@@ -118,6 +118,8 @@ public:
float baseline(float width, float height, void* layoutContext);
bool hasErrata(YGErrata errata) const { return config_->hasErrata(errata); }
YGDirtiedFunc getDirtied() const { return dirtied_; }
// For Performance reasons passing as reference.

View File

@@ -2984,7 +2984,7 @@ static void YGNodelayoutImpl(
availableInnerMainDim = maxInnerMainDim;
} else {
bool useLegacyStretchBehaviour =
node->getConfig()->getErrata() & YGErrataStretchFlexBasis;
node->hasErrata(YGErrataStretchFlexBasis);
if (!useLegacyStretchBehaviour &&
((!YGFloatIsUndefined(
@@ -4313,16 +4313,16 @@ YOGA_EXPORT void YGConfigSetUseWebDefaults(
YOGA_EXPORT bool YGConfigGetUseLegacyStretchBehaviour(
const YGConfigRef config) {
return config->getErrata() & YGErrataStretchFlexBasis;
return config->hasErrata(YGErrataStretchFlexBasis);
}
YOGA_EXPORT void YGConfigSetUseLegacyStretchBehaviour(
const YGConfigRef config,
const bool useLegacyStretchBehaviour) {
if (useLegacyStretchBehaviour) {
config->setErrata(config->getErrata() | YGErrataStretchFlexBasis);
config->addErrata(YGErrataStretchFlexBasis);
} else {
config->setErrata(config->getErrata() & ~YGErrataStretchFlexBasis);
config->removeErrata(YGErrataStretchFlexBasis);
}
}