From 6f5eaefc51f8be7c1d2ea4b2b0e779807bf750c6 Mon Sep 17 00:00:00 2001 From: Nick Gerleman Date: Thu, 14 Sep 2023 23:06:34 -0700 Subject: [PATCH] C++ style enums 4/N: Errata (#1388) Summary: X-link: https://github.com/facebook/react-native/pull/39451 Pull Request resolved: https://github.com/facebook/yoga/pull/1388 This converts usages of YGErrata to Errata Reviewed By: rozele Differential Revision: D49270354 fbshipit-source-id: 39c0d26a1609cca0a96da843796ab41c81e3af93 --- enums.py | 3 +++ yoga/Yoga.cpp | 4 ++-- yoga/algorithm/CalculateLayout.cpp | 2 +- yoga/config/Config.cpp | 12 ++++++------ yoga/config/Config.h | 13 +++++++------ yoga/enums/Errata.h | 2 ++ yoga/enums/PrintOptions.h | 2 ++ yoga/node/Node.h | 3 ++- 8 files changed, 25 insertions(+), 16 deletions(-) diff --git a/enums.py b/enums.py index d12c3d5f..c51ee41a 100755 --- a/enums.py +++ b/enums.py @@ -164,6 +164,9 @@ for name, values in sorted(ENUMS.items()): ordinal = value[0] if isinstance(value, tuple) else value f.write(f" {ordinal} = YG{name}{ordinal},\n") f.write("};\n\n") + f.write( + f"YG_DEFINE_ENUM_FLAG_OPERATORS({name})\n\n" if name in BITSET_ENUMS else "" + ) f.write("template <>\n") f.write(f"constexpr inline int32_t ordinalCount<{name}>() {{\n") diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index d1f9a4f8..63678fa6 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -878,11 +878,11 @@ void* YGConfigGetContext(const YGConfigConstRef config) { } void YGConfigSetErrata(YGConfigRef config, YGErrata errata) { - resolveRef(config)->setErrata(errata); + resolveRef(config)->setErrata(scopedEnum(errata)); } YGErrata YGConfigGetErrata(YGConfigConstRef config) { - return resolveRef(config)->getErrata(); + return unscopedEnum(resolveRef(config)->getErrata()); } void YGConfigSetCloneNodeFunc( diff --git a/yoga/algorithm/CalculateLayout.cpp b/yoga/algorithm/CalculateLayout.cpp index 55fb9cd8..f39c6285 100644 --- a/yoga/algorithm/CalculateLayout.cpp +++ b/yoga/algorithm/CalculateLayout.cpp @@ -1755,7 +1755,7 @@ static void calculateLayoutImpl( availableInnerMainDim = maxInnerMainDim; } else { bool useLegacyStretchBehaviour = - node->hasErrata(YGErrataStretchFlexBasis); + node->hasErrata(Errata::StretchFlexBasis); if (!useLegacyStretchBehaviour && ((!yoga::isUndefined(flexLine.layout.totalFlexGrowFactors) && diff --git a/yoga/config/Config.cpp b/yoga/config/Config.cpp index a3e48d34..85f715bc 100644 --- a/yoga/config/Config.cpp +++ b/yoga/config/Config.cpp @@ -54,24 +54,24 @@ ExperimentalFeatureSet Config::getEnabledExperiments() const { return experimentalFeatures_; } -void Config::setErrata(YGErrata errata) { +void Config::setErrata(Errata errata) { errata_ = errata; } -void Config::addErrata(YGErrata errata) { +void Config::addErrata(Errata errata) { errata_ |= errata; } -void Config::removeErrata(YGErrata errata) { +void Config::removeErrata(Errata errata) { errata_ &= (~errata); } -YGErrata Config::getErrata() const { +Errata Config::getErrata() const { return errata_; } -bool Config::hasErrata(YGErrata errata) const { - return (errata_ & errata) != YGErrataNone; +bool Config::hasErrata(Errata errata) const { + return (errata_ & errata) != Errata::None; } void Config::setPointScaleFactor(float pointScaleFactor) { diff --git a/yoga/config/Config.h b/yoga/config/Config.h index bc5a0ef2..e910ea04 100644 --- a/yoga/config/Config.h +++ b/yoga/config/Config.h @@ -10,6 +10,7 @@ #include #include +#include #include // Tag struct used to form the opaque YGConfigRef for the public C API @@ -51,11 +52,11 @@ class YG_EXPORT Config : public ::YGConfig { bool isExperimentalFeatureEnabled(ExperimentalFeature feature) const; ExperimentalFeatureSet getEnabledExperiments() const; - void setErrata(YGErrata errata); - void addErrata(YGErrata errata); - void removeErrata(YGErrata errata); - YGErrata getErrata() const; - bool hasErrata(YGErrata errata) const; + void setErrata(Errata errata); + void addErrata(Errata errata); + void removeErrata(Errata errata); + Errata getErrata() const; + bool hasErrata(Errata errata) const; void setPointScaleFactor(float pointScaleFactor); float getPointScaleFactor() const; @@ -82,7 +83,7 @@ class YG_EXPORT Config : public ::YGConfig { ConfigFlags flags_{}; ExperimentalFeatureSet experimentalFeatures_{}; - YGErrata errata_ = YGErrataNone; + Errata errata_ = Errata::None; float pointScaleFactor_ = 1.0f; void* context_ = nullptr; }; diff --git a/yoga/enums/Errata.h b/yoga/enums/Errata.h index a96b2967..b0cf6210 100644 --- a/yoga/enums/Errata.h +++ b/yoga/enums/Errata.h @@ -22,6 +22,8 @@ enum class Errata : uint32_t { Classic = YGErrataClassic, }; +YG_DEFINE_ENUM_FLAG_OPERATORS(Errata) + template <> constexpr inline int32_t ordinalCount() { return 4; diff --git a/yoga/enums/PrintOptions.h b/yoga/enums/PrintOptions.h index 603c91aa..c61fbc63 100644 --- a/yoga/enums/PrintOptions.h +++ b/yoga/enums/PrintOptions.h @@ -21,6 +21,8 @@ enum class PrintOptions : uint32_t { Children = YGPrintOptionsChildren, }; +YG_DEFINE_ENUM_FLAG_OPERATORS(PrintOptions) + template <> constexpr inline int32_t ordinalCount() { return 3; diff --git a/yoga/node/Node.h b/yoga/node/Node.h index e088ab99..91d14445 100644 --- a/yoga/node/Node.h +++ b/yoga/node/Node.h @@ -14,6 +14,7 @@ #include #include +#include #include #include #include @@ -109,7 +110,7 @@ class YG_EXPORT Node : public ::YGNode { float baseline(float width, float height) const; - bool hasErrata(YGErrata errata) const { + bool hasErrata(Errata errata) const { return config_->hasErrata(errata); }