mirror of
https://github.com/servo/servo.git
synced 2025-06-18 22:34:30 +01:00
Replace Node::{with_base, with_mut_base} by Node::{node, mut_node}.
This commit is contained in:
parent
5c725b31af
commit
364256e359
5 changed files with 97 additions and 123 deletions
|
@ -52,7 +52,7 @@ pub struct LayoutView;
|
|||
/// FIXME: This should be replaced with a trait once they can inherit from structs.
|
||||
#[deriving(Eq)]
|
||||
pub struct AbstractNode<View> {
|
||||
priv obj: *mut Node<View>,
|
||||
priv obj: *mut Box<Node<View>>,
|
||||
}
|
||||
|
||||
pub struct AbstractNodeChildrenIterator<View> {
|
||||
|
@ -115,6 +115,18 @@ impl<View> Clone for AbstractNode<View> {
|
|||
}
|
||||
|
||||
impl<View> TreeNodeRef<Node<View>> for AbstractNode<View> {
|
||||
fn node<'a>(&'a self) -> &'a Node<View> {
|
||||
unsafe {
|
||||
&(*self.obj).data
|
||||
}
|
||||
}
|
||||
|
||||
fn mut_node<'a>(&'a self) -> &'a mut Node<View> {
|
||||
unsafe {
|
||||
&mut (*self.obj).data
|
||||
}
|
||||
}
|
||||
|
||||
fn parent_node(node: &Node<View>) -> Option<AbstractNode<View>> {
|
||||
node.parent_node
|
||||
}
|
||||
|
@ -147,15 +159,6 @@ impl<View> TreeNodeRef<Node<View>> for AbstractNode<View> {
|
|||
node.next_sibling = new_next_sibling
|
||||
}
|
||||
|
||||
// FIXME: The duplication between `with_base` and `with_mut_base` is ugly.
|
||||
fn with_base<R>(&self, callback: &fn(&Node<View>) -> R) -> R {
|
||||
self.transmute(callback)
|
||||
}
|
||||
|
||||
fn with_mut_base<R>(&self, callback: &fn(&mut Node<View>) -> R) -> R {
|
||||
self.transmute_mut(callback)
|
||||
}
|
||||
|
||||
fn is_element(&self) -> bool {
|
||||
match self.type_id() {
|
||||
ElementNodeTypeId(*) => true,
|
||||
|
@ -194,7 +197,7 @@ impl<'self, View> AbstractNode<View> {
|
|||
/// chain for nodes.
|
||||
pub fn from_box<T>(ptr: *mut Box<T>) -> AbstractNode<View> {
|
||||
AbstractNode {
|
||||
obj: ptr as *mut Node<View>
|
||||
obj: ptr as *mut Box<Node<View>>
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -202,32 +205,32 @@ impl<'self, View> AbstractNode<View> {
|
|||
|
||||
/// Returns the type ID of this node. Fails if this node is borrowed mutably.
|
||||
pub fn type_id(self) -> NodeTypeId {
|
||||
self.with_base(|b| b.type_id)
|
||||
self.node().type_id
|
||||
}
|
||||
|
||||
/// Returns the parent node of this node. Fails if this node is borrowed mutably.
|
||||
pub fn parent_node(self) -> Option<AbstractNode<View>> {
|
||||
self.with_base(|b| b.parent_node)
|
||||
self.node().parent_node
|
||||
}
|
||||
|
||||
/// Returns the first child of this node. Fails if this node is borrowed mutably.
|
||||
pub fn first_child(self) -> Option<AbstractNode<View>> {
|
||||
self.with_base(|b| b.first_child)
|
||||
self.node().first_child
|
||||
}
|
||||
|
||||
/// Returns the last child of this node. Fails if this node is borrowed mutably.
|
||||
pub fn last_child(self) -> Option<AbstractNode<View>> {
|
||||
self.with_base(|b| b.last_child)
|
||||
self.node().last_child
|
||||
}
|
||||
|
||||
/// Returns the previous sibling of this node. Fails if this node is borrowed mutably.
|
||||
pub fn prev_sibling(self) -> Option<AbstractNode<View>> {
|
||||
self.with_base(|b| b.prev_sibling)
|
||||
self.node().prev_sibling
|
||||
}
|
||||
|
||||
/// Returns the next sibling of this node. Fails if this node is borrowed mutably.
|
||||
pub fn next_sibling(self) -> Option<AbstractNode<View>> {
|
||||
self.with_base(|b| b.next_sibling)
|
||||
self.node().next_sibling
|
||||
}
|
||||
|
||||
/// Is this node a root?
|
||||
|
@ -381,11 +384,11 @@ impl<'self, View> AbstractNode<View> {
|
|||
self.type_id() == ElementNodeTypeId(HTMLStyleElementTypeId)
|
||||
}
|
||||
|
||||
pub unsafe fn raw_object(self) -> *mut Node<View> {
|
||||
pub unsafe fn raw_object(self) -> *mut Box<Node<View>> {
|
||||
self.obj
|
||||
}
|
||||
|
||||
pub fn from_raw(raw: *mut Node<View>) -> AbstractNode<View> {
|
||||
pub fn from_raw(raw: *mut Box<Node<View>>) -> AbstractNode<View> {
|
||||
AbstractNode {
|
||||
obj: raw
|
||||
}
|
||||
|
@ -425,27 +428,25 @@ impl<'self, View> AbstractNode<View> {
|
|||
|
||||
// Issue #1030: should not walk the tree
|
||||
pub fn is_in_doc(&self) -> bool {
|
||||
do self.with_base |node| {
|
||||
do node.owner_doc().with_base |document| {
|
||||
match document.GetDocumentElement() {
|
||||
None => false,
|
||||
Some(root) => {
|
||||
let mut node = *self;
|
||||
let mut in_doc;
|
||||
loop {
|
||||
match node.parent_node() {
|
||||
Some(parent) => {
|
||||
node = parent;
|
||||
},
|
||||
None => {
|
||||
// Issue #1029: this is horrible.
|
||||
in_doc = unsafe { node.raw_object() as uint == root.raw_object() as uint };
|
||||
break;
|
||||
}
|
||||
do self.node().owner_doc().with_base |document| {
|
||||
match document.GetDocumentElement() {
|
||||
None => false,
|
||||
Some(root) => {
|
||||
let mut node = *self;
|
||||
let mut in_doc;
|
||||
loop {
|
||||
match node.parent_node() {
|
||||
Some(parent) => {
|
||||
node = parent;
|
||||
},
|
||||
None => {
|
||||
// Issue #1029: this is horrible.
|
||||
in_doc = unsafe { node.raw_object() as uint == root.raw_object() as uint };
|
||||
break;
|
||||
}
|
||||
}
|
||||
in_doc
|
||||
}
|
||||
in_doc
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -486,9 +487,7 @@ impl Node<ScriptView> {
|
|||
let mut cur_node = self.first_child;
|
||||
while cur_node.is_some() {
|
||||
for node in cur_node.unwrap().traverse_preorder() {
|
||||
do node.with_mut_base |node_base| {
|
||||
node_base.set_owner_doc(doc);
|
||||
}
|
||||
node.mut_node().set_owner_doc(doc);
|
||||
};
|
||||
cur_node = cur_node.unwrap().next_sibling();
|
||||
}
|
||||
|
@ -784,9 +783,7 @@ impl Node<ScriptView> {
|
|||
// If the node already exists it is removed from current parent node.
|
||||
node.parent_node().map(|parent| parent.remove_child(node));
|
||||
abstract_self.add_child(node);
|
||||
do node.with_mut_base |node| {
|
||||
node.add_to_doc(abstract_self, self.owner_doc());
|
||||
}
|
||||
node.mut_node().add_to_doc(node, self.owner_doc());
|
||||
Ok(node)
|
||||
}
|
||||
|
||||
|
@ -949,14 +946,10 @@ impl AbstractNode<LayoutView> {
|
|||
// Node. Also this makes it easier to switch to RWArc if we decide that is
|
||||
// necessary.
|
||||
pub fn read_layout_data<R>(self, blk: &fn(data: &LayoutData) -> R) -> R {
|
||||
do self.with_base |b| {
|
||||
blk(&b.layout_data)
|
||||
}
|
||||
blk(&self.node().layout_data)
|
||||
}
|
||||
|
||||
pub fn write_layout_data<R>(self, blk: &fn(data: &mut LayoutData) -> R) -> R {
|
||||
do self.with_mut_base |b| {
|
||||
blk(&mut b.layout_data)
|
||||
}
|
||||
blk(&mut self.mut_node().layout_data)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue