diff --git a/lib/yoga/src/main/cpp/yoga/YGEnums.cpp b/lib/yoga/src/main/cpp/yoga/YGEnums.cpp index acb1bd072a8..50cc418a914 100644 --- a/lib/yoga/src/main/cpp/yoga/YGEnums.cpp +++ b/lib/yoga/src/main/cpp/yoga/YGEnums.cpp @@ -87,6 +87,20 @@ const char* YGEdgeToString(const YGEdge value) { return "unknown"; } +const char* YGErrataToString(const YGErrata value) { + switch (value) { + case YGErrataNone: + return "none"; + case YGErrataStretchFlexBasis: + return "stretch-flex-basis"; + case YGErrataAll: + return "all"; + case YGErrataClassic: + return "classic"; + } + return "unknown"; +} + const char* YGExperimentalFeatureToString(const YGExperimentalFeature value) { switch (value) { case YGExperimentalFeatureWebFlexBasis: diff --git a/lib/yoga/src/main/cpp/yoga/YGEnums.h b/lib/yoga/src/main/cpp/yoga/YGEnums.h index 834e5f669ca..13840694b91 100644 --- a/lib/yoga/src/main/cpp/yoga/YGEnums.h +++ b/lib/yoga/src/main/cpp/yoga/YGEnums.h @@ -54,6 +54,14 @@ YG_ENUM_SEQ_DECL( YGEdgeVertical, YGEdgeAll) +YG_ENUM_DECL( + YGErrata, + YGErrataNone = 0, + YGErrataStretchFlexBasis = 1, + YGErrataAll = 2147483647, + YGErrataClassic = 2147483646) +YG_DEFINE_ENUM_FLAG_OPERATORS(YGErrata) + YG_ENUM_SEQ_DECL( YGExperimentalFeature, YGExperimentalFeatureWebFlexBasis, diff --git a/lib/yoga/src/main/cpp/yoga/YGMacros.h b/lib/yoga/src/main/cpp/yoga/YGMacros.h index 13b3c9b4f52..0ce8c2eed4c 100644 --- a/lib/yoga/src/main/cpp/yoga/YGMacros.h +++ b/lib/yoga/src/main/cpp/yoga/YGMacros.h @@ -7,6 +7,10 @@ #pragma once +#ifdef __cplusplus +#include +#endif + #ifdef __cplusplus #define YG_EXTERN_C_BEGIN extern "C" { #define YG_EXTERN_C_END } @@ -40,6 +44,48 @@ #define YG_ENUM_END(name) name #endif +#ifdef __cplusplus +#define YG_DEFINE_ENUM_FLAG_OPERATORS(name) \ + extern "C++" { \ + constexpr inline name operator~(name a) { \ + return static_cast( \ + ~static_cast::type>(a)); \ + } \ + constexpr inline name operator|(name a, name b) { \ + return static_cast( \ + static_cast::type>(a) | \ + static_cast::type>(b)); \ + } \ + constexpr inline name operator&(name a, name b) { \ + return static_cast( \ + static_cast::type>(a) & \ + static_cast::type>(b)); \ + } \ + constexpr inline name operator^(name a, name b) { \ + return static_cast( \ + static_cast::type>(a) ^ \ + static_cast::type>(b)); \ + } \ + inline name& operator|=(name& a, name b) { \ + return reinterpret_cast( \ + reinterpret_cast::type&>(a) |= \ + static_cast::type>(b)); \ + } \ + inline name& operator&=(name& a, name b) { \ + return reinterpret_cast( \ + reinterpret_cast::type&>(a) &= \ + static_cast::type>(b)); \ + } \ + inline name& operator^=(name& a, name b) { \ + return reinterpret_cast( \ + reinterpret_cast::type&>(a) ^= \ + static_cast::type>(b)); \ + } \ + } +#else +#define YG_DEFINE_ENUM_FLAG_OPERATORS(name) +#endif + #ifdef __cplusplus namespace facebook { namespace yoga { diff --git a/lib/yoga/src/main/java/com/facebook/yoga/YogaErrata.java b/lib/yoga/src/main/java/com/facebook/yoga/YogaErrata.java new file mode 100644 index 00000000000..6ae5ac0e7cb --- /dev/null +++ b/lib/yoga/src/main/java/com/facebook/yoga/YogaErrata.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +// @generated by enums.py + +package com.facebook.yoga; + +public enum YogaErrata { + NONE(0), + STRETCH_FLEX_BASIS(1), + ALL(2147483647), + CLASSIC(2147483646); + + private final int mIntValue; + + YogaErrata(int intValue) { + mIntValue = intValue; + } + + public int intValue() { + return mIntValue; + } + + public static YogaErrata fromInt(int value) { + switch (value) { + case 0: return NONE; + case 1: return STRETCH_FLEX_BASIS; + case 2147483647: return ALL; + case 2147483646: return CLASSIC; + default: throw new IllegalArgumentException("Unknown enum value: " + value); + } + } +}