Remove Bitfield from YGStyle
Summary: ##Changelog: [Internal][Yoga] Remove Bitfield from YGStyle Reviewed By: astreet Differential Revision: D18519614 fbshipit-source-id: 70f18bc679b62712d40d76bd793cf85906b067a1
This commit is contained in:
committed by
Facebook Github Bot
parent
9650c1903d
commit
9d2ca758fa
150
yoga/YGStyle.h
150
yoga/YGStyle.h
@@ -10,12 +10,12 @@
|
|||||||
#include <array>
|
#include <array>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#include "Bitfield.h"
|
|
||||||
#include "CompactValue.h"
|
#include "CompactValue.h"
|
||||||
#include "YGEnums.h"
|
#include "YGEnums.h"
|
||||||
#include "YGFloatOptional.h"
|
#include "YGFloatOptional.h"
|
||||||
#include "Yoga-internal.h"
|
#include "Yoga-internal.h"
|
||||||
#include "Yoga.h"
|
#include "Yoga.h"
|
||||||
|
#include "BitUtils.h"
|
||||||
|
|
||||||
class YOGA_EXPORT YGStyle {
|
class YOGA_EXPORT YGStyle {
|
||||||
template <typename Enum>
|
template <typename Enum>
|
||||||
@@ -27,6 +27,19 @@ public:
|
|||||||
using Dimensions = Values<YGDimension>;
|
using Dimensions = Values<YGDimension>;
|
||||||
using Edges = Values<YGEdge>;
|
using Edges = Values<YGEdge>;
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct BitfieldRef {
|
||||||
|
YGStyle& style;
|
||||||
|
size_t offset;
|
||||||
|
operator T() const {
|
||||||
|
return facebook::yoga::detail::getEnumData<T>(style.flags, offset);
|
||||||
|
}
|
||||||
|
BitfieldRef<T>& operator=(T x) {
|
||||||
|
facebook::yoga::detail::setEnumData<T>(style.flags, offset, x);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
template <typename T, T YGStyle::*Prop>
|
template <typename T, T YGStyle::*Prop>
|
||||||
struct Ref {
|
struct Ref {
|
||||||
YGStyle& style;
|
YGStyle& style;
|
||||||
@@ -60,43 +73,35 @@ public:
|
|||||||
CompactValue operator[](Idx idx) const { return (style.*Prop)[idx]; }
|
CompactValue operator[](Idx idx) const { return (style.*Prop)[idx]; }
|
||||||
};
|
};
|
||||||
|
|
||||||
YGStyle() = default;
|
YGStyle() {
|
||||||
|
alignContent() = YGAlignFlexStart;
|
||||||
|
alignItems() = YGAlignStretch;
|
||||||
|
}
|
||||||
~YGStyle() = default;
|
~YGStyle() = default;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static constexpr size_t directionIdx = 0;
|
static constexpr size_t directionOffset = 0;
|
||||||
static constexpr size_t flexDirectionIdx = 1;
|
static constexpr size_t flexdirectionOffset =
|
||||||
static constexpr size_t justifyContentIdx = 2;
|
directionOffset + facebook::yoga::detail::bitWidthFn<YGDirection>();
|
||||||
static constexpr size_t alignContentIdx = 3;
|
static constexpr size_t justifyContentOffset = flexdirectionOffset +
|
||||||
static constexpr size_t alignItemsIdx = 4;
|
facebook::yoga::detail::bitWidthFn<YGFlexDirection>();
|
||||||
static constexpr size_t alignSelfIdx = 5;
|
static constexpr size_t alignContentOffset =
|
||||||
static constexpr size_t positionTypeIdx = 6;
|
justifyContentOffset + facebook::yoga::detail::bitWidthFn<YGJustify>();
|
||||||
static constexpr size_t flexWrapIdx = 7;
|
static constexpr size_t alignItemsOffset =
|
||||||
static constexpr size_t overflowIdx = 8;
|
alignContentOffset + facebook::yoga::detail::bitWidthFn<YGAlign>();
|
||||||
static constexpr size_t displayIdx = 9;
|
static constexpr size_t alignSelfOffset =
|
||||||
using Flags = facebook::yoga::Bitfield<
|
alignItemsOffset + facebook::yoga::detail::bitWidthFn<YGAlign>();
|
||||||
uint32_t,
|
static constexpr size_t positionTypeOffset =
|
||||||
YGDirection,
|
alignSelfOffset + facebook::yoga::detail::bitWidthFn<YGAlign>();
|
||||||
YGFlexDirection,
|
static constexpr size_t flexWrapOffset =
|
||||||
YGJustify,
|
positionTypeOffset + facebook::yoga::detail::bitWidthFn<YGPositionType>();
|
||||||
YGAlign,
|
static constexpr size_t overflowOffset =
|
||||||
YGAlign,
|
flexWrapOffset + facebook::yoga::detail::bitWidthFn<YGWrap>();
|
||||||
YGAlign,
|
static constexpr size_t displayOffset =
|
||||||
YGPositionType,
|
overflowOffset + facebook::yoga::detail::bitWidthFn<YGOverflow>();
|
||||||
YGWrap,
|
|
||||||
YGOverflow,
|
uint32_t flags = 0;
|
||||||
YGDisplay>;
|
|
||||||
|
|
||||||
Flags flags_ = {YGDirectionInherit,
|
|
||||||
YGFlexDirectionColumn,
|
|
||||||
YGJustifyFlexStart,
|
|
||||||
YGAlignFlexStart,
|
|
||||||
YGAlignStretch,
|
|
||||||
YGAlignAuto,
|
|
||||||
YGPositionTypeRelative,
|
|
||||||
YGWrapNoWrap,
|
|
||||||
YGOverflowVisible,
|
|
||||||
YGDisplayFlex};
|
|
||||||
YGFloatOptional flex_ = {};
|
YGFloatOptional flex_ = {};
|
||||||
YGFloatOptional flexGrow_ = {};
|
YGFloatOptional flexGrow_ = {};
|
||||||
YGFloatOptional flexShrink_ = {};
|
YGFloatOptional flexShrink_ = {};
|
||||||
@@ -115,45 +120,68 @@ public:
|
|||||||
// for library users needing a type
|
// for library users needing a type
|
||||||
using ValueRepr = std::remove_reference<decltype(margin_[0])>::type;
|
using ValueRepr = std::remove_reference<decltype(margin_[0])>::type;
|
||||||
|
|
||||||
YGDirection direction() const { return flags_.at<directionIdx>(); }
|
YGDirection direction() const {
|
||||||
Flags::Ref<directionIdx> direction() { return flags_.at<directionIdx>(); }
|
return facebook::yoga::detail::getEnumData<YGDirection>(
|
||||||
|
flags, directionOffset);
|
||||||
|
}
|
||||||
|
BitfieldRef<YGDirection> direction() { return {*this, directionOffset}; }
|
||||||
|
|
||||||
YGFlexDirection flexDirection() const {
|
YGFlexDirection flexDirection() const {
|
||||||
return flags_.at<flexDirectionIdx>();
|
return facebook::yoga::detail::getEnumData<YGFlexDirection>(
|
||||||
|
flags, flexdirectionOffset);
|
||||||
}
|
}
|
||||||
Flags::Ref<flexDirectionIdx> flexDirection() {
|
BitfieldRef<YGFlexDirection> flexDirection() {
|
||||||
return flags_.at<flexDirectionIdx>();
|
return {*this, flexdirectionOffset};
|
||||||
}
|
}
|
||||||
|
|
||||||
YGJustify justifyContent() const { return flags_.at<justifyContentIdx>(); }
|
YGJustify justifyContent() const {
|
||||||
Flags::Ref<justifyContentIdx> justifyContent() {
|
return facebook::yoga::detail::getEnumData<YGJustify>(
|
||||||
return flags_.at<justifyContentIdx>();
|
flags, justifyContentOffset);
|
||||||
|
}
|
||||||
|
BitfieldRef<YGJustify> justifyContent() {
|
||||||
|
return {*this, justifyContentOffset};
|
||||||
}
|
}
|
||||||
|
|
||||||
YGAlign alignContent() const { return flags_.at<alignContentIdx>(); }
|
YGAlign alignContent() const {
|
||||||
Flags::Ref<alignContentIdx> alignContent() {
|
return facebook::yoga::detail::getEnumData<YGAlign>(
|
||||||
return flags_.at<alignContentIdx>();
|
flags, alignContentOffset);
|
||||||
|
}
|
||||||
|
BitfieldRef<YGAlign> alignContent() { return {*this, alignContentOffset}; }
|
||||||
|
|
||||||
|
YGAlign alignItems() const {
|
||||||
|
return facebook::yoga::detail::getEnumData<YGAlign>(
|
||||||
|
flags, alignItemsOffset);
|
||||||
|
}
|
||||||
|
BitfieldRef<YGAlign> alignItems() { return {*this, alignItemsOffset}; }
|
||||||
|
|
||||||
|
YGAlign alignSelf() const {
|
||||||
|
return facebook::yoga::detail::getEnumData<YGAlign>(flags, alignSelfOffset);
|
||||||
|
}
|
||||||
|
BitfieldRef<YGAlign> alignSelf() { return {*this, alignSelfOffset}; }
|
||||||
|
|
||||||
|
YGPositionType positionType() const {
|
||||||
|
return facebook::yoga::detail::getEnumData<YGPositionType>(
|
||||||
|
flags, positionTypeOffset);
|
||||||
|
}
|
||||||
|
BitfieldRef<YGPositionType> positionType() {
|
||||||
|
return {*this, positionTypeOffset};
|
||||||
}
|
}
|
||||||
|
|
||||||
YGAlign alignItems() const { return flags_.at<alignItemsIdx>(); }
|
YGWrap flexWrap() const {
|
||||||
Flags::Ref<alignItemsIdx> alignItems() { return flags_.at<alignItemsIdx>(); }
|
return facebook::yoga::detail::getEnumData<YGWrap>(flags, flexWrapOffset);
|
||||||
|
|
||||||
YGAlign alignSelf() const { return flags_.at<alignSelfIdx>(); }
|
|
||||||
Flags::Ref<alignSelfIdx> alignSelf() { return flags_.at<alignSelfIdx>(); }
|
|
||||||
|
|
||||||
YGPositionType positionType() const { return flags_.at<positionTypeIdx>(); }
|
|
||||||
Flags::Ref<positionTypeIdx> positionType() {
|
|
||||||
return flags_.at<positionTypeIdx>();
|
|
||||||
}
|
}
|
||||||
|
BitfieldRef<YGWrap> flexWrap() { return {*this, flexWrapOffset}; }
|
||||||
|
|
||||||
YGWrap flexWrap() const { return flags_.at<flexWrapIdx>(); }
|
YGOverflow overflow() const {
|
||||||
Flags::Ref<flexWrapIdx> flexWrap() { return flags_.at<flexWrapIdx>(); }
|
return facebook::yoga::detail::getEnumData<YGOverflow>(
|
||||||
|
flags, overflowOffset);
|
||||||
|
}
|
||||||
|
BitfieldRef<YGOverflow> overflow() { return {*this, overflowOffset}; }
|
||||||
|
|
||||||
YGOverflow overflow() const { return flags_.at<overflowIdx>(); }
|
YGDisplay display() const {
|
||||||
Flags::Ref<overflowIdx> overflow() { return flags_.at<overflowIdx>(); }
|
return facebook::yoga::detail::getEnumData<YGDisplay>(flags, displayOffset);
|
||||||
|
}
|
||||||
YGDisplay display() const { return flags_.at<displayIdx>(); }
|
BitfieldRef<YGDisplay> display() { return {*this, displayOffset}; }
|
||||||
Flags::Ref<displayIdx> display() { return flags_.at<displayIdx>(); }
|
|
||||||
|
|
||||||
YGFloatOptional flex() const { return flex_; }
|
YGFloatOptional flex() const { return flex_; }
|
||||||
Ref<YGFloatOptional, &YGStyle::flex_> flex() { return {*this}; }
|
Ref<YGFloatOptional, &YGStyle::flex_> flex() { return {*this}; }
|
||||||
|
Reference in New Issue
Block a user