Convert NodeRange to a struct with a static new() function.

This commit is contained in:
Brian J. Burg 2012-10-22 11:50:39 -07:00
parent 8ea5c64bd0
commit ee47778bd5
2 changed files with 16 additions and 9 deletions

View file

@ -10,7 +10,7 @@ use layout::block::BlockFlowData;
use layout::box::{LogicalBefore, LogicalAfter, RenderBox}; use layout::box::{LogicalBefore, LogicalAfter, RenderBox};
use layout::context::LayoutContext; use layout::context::LayoutContext;
use layout::debug::BoxedDebugMethods; use layout::debug::BoxedDebugMethods;
use layout::inline::InlineFlowData; use layout::inline::{InlineFlowData, NodeRange};
use layout::root::RootFlowData; use layout::root::RootFlowData;
use util::range::{Range, MutableRange}; use util::range::{Range, MutableRange};
use util::tree; use util::tree;
@ -179,11 +179,9 @@ impl BoxConsumer {
// only create NodeRanges for non-leaf nodes. // only create NodeRanges for non-leaf nodes.
let final_span_length = self.flow.inline().boxes.len() - entry.start_idx + 1; let final_span_length = self.flow.inline().boxes.len() - entry.start_idx + 1;
assert final_span_length > 1; assert final_span_length > 1;
let mapping = { node: copy box.d().node, let new_range = Range(entry.start_idx, final_span_length);
range: MutableRange(entry.start_idx, final_span_length) debug!("BoxConsumer: adding element range=%?", new_range);
}; self.flow.inline().elems.push(NodeRange::new(copy box.d().node, move new_range));
debug!("BoxConsumer: adding element range=%?", mapping.range);
self.flow.inline().elems.push(move mapping);
}, },
@BlockFlow(*) => { @BlockFlow(*) => {
assert self.stack.len() == 0; assert self.stack.len() == 0;

View file

@ -41,7 +41,16 @@ serve as the starting point, but the current design doesn't make it
hard to try out that alternative. hard to try out that alternative.
*/ */
type NodeRange = {node: Node, range: MutableRange}; struct NodeRange {
node: Node,
mut range: Range,
}
impl NodeRange {
static pure fn new(node: Node, range: Range) -> NodeRange {
NodeRange { node: node, range: range }
}
}
// stack-allocated object for scanning an inline flow into // stack-allocated object for scanning an inline flow into
// TextRun-containing TextBoxes. // TextRun-containing TextBoxes.
@ -305,7 +314,7 @@ impl LineboxScanner {
while repair_stack.len() > 0 && old_i == elems[repair_stack.last().elem_idx].range.end() { while repair_stack.len() > 0 && old_i == elems[repair_stack.last().elem_idx].range.end() {
let item = repair_stack.pop(); let item = repair_stack.pop();
debug!("Set range for %u to %?", item.elem_idx, Range(item.begin_idx, new_j)); debug!("Set range for %u to %?", item.elem_idx, Range(item.begin_idx, new_j));
elems[item.elem_idx].range.reset(item.begin_idx, new_j); elems[item.elem_idx].range = Range(item.begin_idx, new_j);
} }
old_i += 1; old_i += 1;
} }
@ -314,7 +323,7 @@ impl LineboxScanner {
while repair_stack.len() > 0 && old_i == elems[repair_stack.last().elem_idx].range.end() { while repair_stack.len() > 0 && old_i == elems[repair_stack.last().elem_idx].range.end() {
let item = repair_stack.pop(); let item = repair_stack.pop();
debug!("Set range for %u to %?", item.elem_idx, Range(item.begin_idx, new_j)); debug!("Set range for %u to %?", item.elem_idx, Range(item.begin_idx, new_j));
elems[item.elem_idx].range.reset(item.begin_idx, new_j); elems[item.elem_idx].range = Range(item.begin_idx, new_j);
} }
} }
} }