Switch layout flatten to BFS for node ordering

This commit is contained in:
Levi McCallum 2016-01-28 23:38:18 -08:00
parent c8af28e2d7
commit 184d1fc059
2 changed files with 9 additions and 9 deletions

View File

@ -64,7 +64,7 @@ NSInteger const ASDefaultDrawingPriority = ASDefaultTransactionPriority;
BOOL ASDisplayNodeSubclassOverridesSelector(Class subclass, SEL selector)
{
return ASSubclassOverridesSelector([ASDisplayNode class], subclass, selector);
return ASSubclassOverridesSelector([ASDisplayNode class], subclass, selector);
}
void ASDisplayNodeRespectThreadAffinityOfNode(ASDisplayNode *node, void (^block)())

View File

@ -12,7 +12,7 @@
#import "ASAssert.h"
#import "ASLayoutSpecUtilities.h"
#import "ASInternalHelpers.h"
#import <stack>
#import <queue>
CGPoint const CGPointNull = {NAN, NAN};
@ -71,14 +71,14 @@ extern BOOL CGPointIsNull(CGPoint point)
BOOL visited;
};
// Stack of Contexts, used to keep track of sublayouts while traversing this layout in a DFS fashion.
std::stack<Context> stack;
stack.push({self, CGPointMake(0, 0), NO});
// Stack of Contexts, used to keep track of sublayouts while traversing this layout in a BFS fashion.
std::queue<Context> queue;
queue.push({self, CGPointMake(0, 0), NO});
while (!stack.empty()) {
Context &context = stack.top();
while (!queue.empty()) {
Context &context = queue.front();
if (context.visited) {
stack.pop();
queue.pop();
} else {
context.visited = YES;
@ -90,7 +90,7 @@ extern BOOL CGPointIsNull(CGPoint point)
}
for (ASLayout *sublayout in context.layout.sublayouts) {
stack.push({sublayout, context.absolutePosition + sublayout.position, NO});
queue.push({sublayout, context.absolutePosition + sublayout.position, NO});
}
}
}