From e96d14395c0af54579a38926a44bbf07a97359fb Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Thu, 13 Dec 2018 07:09:31 -0800 Subject: [PATCH] `YGNodeBoundAxisWithinMinAndMax` accepts `YGFloatOptional` Summary: @public Saves some calls to `.unwrap()` Reviewed By: SidharthGuglani Differential Revision: D13439600 fbshipit-source-id: ce0f6bad9a0709e9d64e23d8349bc2423b9b2ad4 --- yoga/Yoga.cpp | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 653f47e7..bc457b1f 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -1212,7 +1212,7 @@ static inline bool YGNodeIsLayoutDimDefined( static YGFloatOptional YGNodeBoundAxisWithinMinAndMax( const YGNodeRef node, const YGFlexDirection axis, - const float value, + const YGFloatOptional value, const float axisSize) { YGFloatOptional min; YGFloatOptional max; @@ -1229,15 +1229,15 @@ static YGFloatOptional YGNodeBoundAxisWithinMinAndMax( node->getStyle().maxDimensions[YGDimensionWidth], axisSize); } - if (!max.isUndefined() && max.unwrap() >= 0 && value > max.unwrap()) { + if (max >= YGFloatOptional{0} && value > max) { return max; } - if (!min.isUndefined() && min.unwrap() >= 0 && value < min.unwrap()) { + if (min >= YGFloatOptional{0} && value < min) { return min; } - return YGFloatOptional(value); + return value; } // Like YGNodeBoundAxisWithinMinAndMax but also ensures that the value doesn't @@ -1249,7 +1249,9 @@ static inline float YGNodeBoundAxis( const float axisSize, const float widthSize) { return YGFloatMax( - YGNodeBoundAxisWithinMinAndMax(node, axis, value, axisSize).unwrap(), + YGNodeBoundAxisWithinMinAndMax( + node, axis, YGFloatOptional{value}, axisSize) + .unwrap(), YGNodePaddingAndBorderForAxis(node, axis, widthSize)); } @@ -2021,7 +2023,7 @@ static YGCollectFlexItemsRowValues YGCalculateCollectFlexItemsRowValues( YGNodeBoundAxisWithinMinAndMax( child, mainAxis, - child->getLayout().computedFlexBasis.unwrap(), + child->getLayout().computedFlexBasis, mainAxisownerSize) .unwrap(); @@ -2096,13 +2098,12 @@ static float YGDistributeFreeSpaceSecondPass( const bool isNodeFlexWrap = node->getStyle().flexWrap != YGWrapNoWrap; for (auto currentRelativeChild : collectedFlexItemsValues.relativeChildren) { - childFlexBasis = - YGNodeBoundAxisWithinMinAndMax( - currentRelativeChild, - mainAxis, - currentRelativeChild->getLayout().computedFlexBasis.unwrap(), - mainAxisownerSize) - .unwrap(); + childFlexBasis = YGNodeBoundAxisWithinMinAndMax( + currentRelativeChild, + mainAxis, + currentRelativeChild->getLayout().computedFlexBasis, + mainAxisownerSize) + .unwrap(); float updatedMainSize = childFlexBasis; if (!YGFloatIsUndefined(collectedFlexItemsValues.remainingFreeSpace) && @@ -2280,7 +2281,7 @@ static void YGDistributeFreeSpaceFirstPass( YGNodeBoundAxisWithinMinAndMax( currentRelativeChild, mainAxis, - currentRelativeChild->getLayout().computedFlexBasis.unwrap(), + currentRelativeChild->getLayout().computedFlexBasis, mainAxisownerSize) .unwrap(); @@ -3458,7 +3459,10 @@ static void YGNodelayoutImpl( YGFloatMin( availableInnerMainDim + paddingAndBorderAxisMain, YGNodeBoundAxisWithinMinAndMax( - node, mainAxis, maxLineMainDim, mainAxisownerSize) + node, + mainAxis, + YGFloatOptional{maxLineMainDim}, + mainAxisownerSize) .unwrap()), paddingAndBorderAxisMain), dim[mainAxis]); @@ -3488,7 +3492,8 @@ static void YGNodelayoutImpl( YGNodeBoundAxisWithinMinAndMax( node, crossAxis, - totalLineCrossDim + paddingAndBorderAxisCross, + YGFloatOptional{totalLineCrossDim + + paddingAndBorderAxisCross}, crossAxisownerSize) .unwrap()), paddingAndBorderAxisCross),