История изменений
Исправление shkolnick-kun, (текущая версия) :
Ну тащемта, он прав насчет выразительности (сам того не зная, ЛОЛ).
В задачах низкоуровневого системного программирования С более выразителен, чем Rust.
Вот смотри, списки: Вставка в зад, Rust:
/// Adds the given node to the back of the list.
fn push_back_node(&mut self, mut node: Box<Node<T>>) {
unsafe {
node.next = None;
node.prev = self.tail;
let node = Some(Shared::new(Box::into_raw(node)));
match self.tail {
None => self.head = node,
Some(tail) => (**tail).next = node,
}
self.tail = node;
self.len += 1;
}
}
То же на Си:
// Insert an item to a list
void bgrt_item_insert(bgrt_item_t *item, bgrt_item_t *head)
{
// A tail of a list
bgrt_item_t * tail;
tail = head->prev;
// Insert an item between a head and a tail
item->prev = tail;
item->next = head;
head->prev = item;
tail->next = item;
}
Вырезать из списка на Rust:
fn pop_front_node(&mut self) -> Option<Box<Node<T>>> {
self.head.map(|node| unsafe {
let node = Box::from_raw(*node);
self.head = node.next;
match self.head {
None => self.tail = None,
Some(head) => (**head).prev = None,
}
self.len -= 1;
node
})
}
void bgrt_item_cut(bgrt_item_t *item)
{
bgrt_item_t * prev;
bgrt_item_t * next;
prev = item->prev; //Previous item
next = item->next; //Next item
next->prev = prev;
prev->next = next;
item->prev = item;
item->next = item;
}
Исходная версия shkolnick-kun, :
Ну иащемта, он прав. В задачах низкоуровневого системного программирования С более выразителен, чем Rust.
Вот смотри, списки: Вставка в зад, Rust:
/// Adds the given node to the back of the list.
fn push_back_node(&mut self, mut node: Box<Node<T>>) {
unsafe {
node.next = None;
node.prev = self.tail;
let node = Some(Shared::new(Box::into_raw(node)));
match self.tail {
None => self.head = node,
Some(tail) => (**tail).next = node,
}
self.tail = node;
self.len += 1;
}
}
То же на Си:
// Insert an item to a list
void bgrt_item_insert(bgrt_item_t *item, bgrt_item_t *head)
{
// A tail of a list
bgrt_item_t * tail;
tail = head->prev;
// Insert an item between a head and a tail
item->prev = tail;
item->next = head;
head->prev = item;
tail->next = item;
}
Вырезать из списка на Rust:
fn pop_front_node(&mut self) -> Option<Box<Node<T>>> {
self.head.map(|node| unsafe {
let node = Box::from_raw(*node);
self.head = node.next;
match self.head {
None => self.tail = None,
Some(head) => (**head).prev = None,
}
self.len -= 1;
node
})
}
void bgrt_item_cut(bgrt_item_t *item)
{
bgrt_item_t * prev;
bgrt_item_t * next;
prev = item->prev; //Previous item
next = item->next; //Next item
next->prev = prev;
prev->next = next;
item->prev = item;
item->next = item;
}