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
This commit is contained in:
Nick Gerleman
2023-09-14 23:06:34 -07:00
committed by Facebook GitHub Bot
parent 42e1f2c737
commit 6f5eaefc51
8 changed files with 25 additions and 16 deletions

View File

@@ -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")

View File

@@ -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(

View File

@@ -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) &&

View File

@@ -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) {

View File

@@ -10,6 +10,7 @@
#include <bitset>
#include <yoga/Yoga.h>
#include <yoga/enums/Errata.h>
#include <yoga/enums/ExperimentalFeature.h>
// 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;
};

View File

@@ -22,6 +22,8 @@ enum class Errata : uint32_t {
Classic = YGErrataClassic,
};
YG_DEFINE_ENUM_FLAG_OPERATORS(Errata)
template <>
constexpr inline int32_t ordinalCount<Errata>() {
return 4;

View File

@@ -21,6 +21,8 @@ enum class PrintOptions : uint32_t {
Children = YGPrintOptionsChildren,
};
YG_DEFINE_ENUM_FLAG_OPERATORS(PrintOptions)
template <>
constexpr inline int32_t ordinalCount<PrintOptions>() {
return 3;

View File

@@ -14,6 +14,7 @@
#include <yoga/Yoga.h>
#include <yoga/config/Config.h>
#include <yoga/enums/Errata.h>
#include <yoga/enums/NodeType.h>
#include <yoga/node/LayoutResults.h>
#include <yoga/style/CompactValue.h>
@@ -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);
}