Remove BItfield from YGLayout.h

Summary:
##Changelog:

[Internal][Yoga] Remove Bitfield from YGLayout

Reviewed By: astreet

Differential Revision: D18519623

fbshipit-source-id: 950b8cb1ca2cd0424b8d8748c4b71336b40fc15f
This commit is contained in:
Sidharth Guglani
2019-11-22 04:28:49 -08:00
committed by Facebook Github Bot
parent 9d2ca758fa
commit f3498a2959
2 changed files with 43 additions and 25 deletions

View File

@@ -6,10 +6,12 @@
*/ */
#pragma once #pragma once
#include "Bitfield.h" #include "BitUtils.h"
#include "YGFloatOptional.h" #include "YGFloatOptional.h"
#include "Yoga-internal.h" #include "Yoga-internal.h"
using namespace facebook::yoga;
struct YGLayout { struct YGLayout {
std::array<float, 4> position = {}; std::array<float, 4> position = {};
std::array<float, 2> dimensions = {{YGUndefined, YGUndefined}}; std::array<float, 2> dimensions = {{YGUndefined, YGUndefined}};
@@ -18,12 +20,14 @@ struct YGLayout {
std::array<float, 4> padding = {}; std::array<float, 4> padding = {};
private: private:
static constexpr size_t directionIdx = 0; static constexpr size_t directionOffset = 0;
static constexpr size_t didUseLegacyFlagIdx = 1; static constexpr size_t didUseLegacyFlagOffset =
static constexpr size_t doesLegacyStretchFlagAffectsLayoutIdx = 2; directionOffset + facebook::yoga::detail::bitWidthFn<YGDirection>();
static constexpr size_t hadOverflowIdx = 3; static constexpr size_t doesLegacyStretchFlagAffectsLayoutOffset =
facebook::yoga::Bitfield<uint8_t, YGDirection, bool, bool, bool> flags_ = didUseLegacyFlagOffset + 1;
{YGDirectionInherit, false, false, false}; static constexpr size_t hadOverflowOffset =
doesLegacyStretchFlagAffectsLayoutOffset + 1;
uint8_t flags = 0;
public: public:
uint32_t computedFlexBasisGeneration = 0; uint32_t computedFlexBasisGeneration = 0;
@@ -41,27 +45,41 @@ public:
YGCachedMeasurement cachedLayout = YGCachedMeasurement(); YGCachedMeasurement cachedLayout = YGCachedMeasurement();
YGDirection direction() const { return flags_.at<directionIdx>(); } YGDirection direction() const {
decltype(flags_)::Ref<directionIdx> direction() { return facebook::yoga::detail::getEnumData<YGDirection>(
return flags_.at<directionIdx>(); flags, directionOffset);
} }
bool didUseLegacyFlag() const { return flags_.at<didUseLegacyFlagIdx>(); } void setDirection(YGDirection direction) {
decltype(flags_)::Ref<didUseLegacyFlagIdx> didUseLegacyFlag() { facebook::yoga::detail::setEnumData<YGDirection>(
return flags_.at<didUseLegacyFlagIdx>(); flags, directionOffset, direction);
}
bool didUseLegacyFlag() const {
return facebook::yoga::detail::getBooleanData(
flags, didUseLegacyFlagOffset);
}
void setDidUseLegacyFlag(bool val) {
facebook::yoga::detail::setBooleanData(flags, didUseLegacyFlagOffset, val);
} }
bool doesLegacyStretchFlagAffectsLayout() const { bool doesLegacyStretchFlagAffectsLayout() const {
return flags_.at<doesLegacyStretchFlagAffectsLayoutIdx>(); return facebook::yoga::detail::getBooleanData(
} flags, doesLegacyStretchFlagAffectsLayoutOffset);
decltype(flags_)::Ref<doesLegacyStretchFlagAffectsLayoutIdx>
doesLegacyStretchFlagAffectsLayout() {
return flags_.at<doesLegacyStretchFlagAffectsLayoutIdx>();
} }
bool hadOverflow() const { return flags_.at<hadOverflowIdx>(); } void setDoesLegacyStretchFlagAffectsLayout(bool val) {
decltype(flags_)::Ref<hadOverflowIdx> hadOverflow() { facebook::yoga::detail::setBooleanData(
return flags_.at<hadOverflowIdx>(); flags, doesLegacyStretchFlagAffectsLayoutOffset, val);
}
bool hadOverflow() const {
return facebook::yoga::detail::getBooleanData(flags, hadOverflowOffset);
}
void setHadOverflow(bool hadOverflow) {
facebook::yoga::detail::setBooleanData(
flags, hadOverflowOffset, hadOverflow);
} }
bool operator==(YGLayout layout) const; bool operator==(YGLayout layout) const;

View File

@@ -232,7 +232,7 @@ void YGNode::removeChild(uint32_t index) {
} }
void YGNode::setLayoutDirection(YGDirection direction) { void YGNode::setLayoutDirection(YGDirection direction) {
layout_.direction() = direction; layout_.setDirection(direction);
} }
void YGNode::setLayoutMargin(float margin, int index) { void YGNode::setLayoutMargin(float margin, int index) {
@@ -270,7 +270,7 @@ void YGNode::setLayoutMeasuredDimension(float measuredDimension, int index) {
} }
void YGNode::setLayoutHadOverflow(bool hadOverflow) { void YGNode::setLayoutHadOverflow(bool hadOverflow) {
layout_.hadOverflow() = hadOverflow; layout_.setHadOverflow(hadOverflow);
} }
void YGNode::setLayoutDimension(float dimension, int index) { void YGNode::setLayoutDimension(float dimension, int index) {
@@ -536,11 +536,11 @@ bool YGNode::didUseLegacyFlag() {
void YGNode::setLayoutDoesLegacyFlagAffectsLayout( void YGNode::setLayoutDoesLegacyFlagAffectsLayout(
bool doesLegacyFlagAffectsLayout) { bool doesLegacyFlagAffectsLayout) {
layout_.doesLegacyStretchFlagAffectsLayout() = doesLegacyFlagAffectsLayout; layout_.setDoesLegacyStretchFlagAffectsLayout(doesLegacyFlagAffectsLayout);
} }
void YGNode::setLayoutDidUseLegacyFlag(bool didUseLegacyFlag) { void YGNode::setLayoutDidUseLegacyFlag(bool didUseLegacyFlag) {
layout_.didUseLegacyFlag() = didUseLegacyFlag; layout_.setDidUseLegacyFlag(didUseLegacyFlag);
} }
bool YGNode::isLayoutTreeEqualToNode(const YGNode& node) const { bool YGNode::isLayoutTreeEqualToNode(const YGNode& node) const {