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; errata_ = errata;
} }
void YGConfig::addErrata(YGErrata errata) {
errata_ |= errata;
}
void YGConfig::removeErrata(YGErrata errata) {
errata_ &= (~errata);
}
YGErrata YGConfig::getErrata() const { YGErrata YGConfig::getErrata() const {
return errata_; return errata_;
} }
bool YGConfig::hasErrata(YGErrata errata) const {
return (errata_ & errata) != YGErrataNone;
}
void YGConfig::setPointScaleFactor(float pointScaleFactor) { void YGConfig::setPointScaleFactor(float pointScaleFactor) {
pointScaleFactor_ = pointScaleFactor; pointScaleFactor_ = pointScaleFactor;
} }

View File

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

View File

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

View File

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