Implement Borrow<T> and BorrowMut<T> for Box<T: ?Sized>
This commit is contained in:
parent
6daf1dcb80
commit
4fdb4cfa89
@ -21,7 +21,7 @@ use core::ops::Deref;
|
||||
use core::option::Option;
|
||||
|
||||
use fmt;
|
||||
use alloc::{rc, arc};
|
||||
use alloc::{boxed, rc, arc};
|
||||
|
||||
use self::Cow::*;
|
||||
|
||||
@ -116,6 +116,14 @@ impl<'a, T: ?Sized> BorrowMut<T> for &'a mut T {
|
||||
fn borrow_mut(&mut self) -> &mut T { &mut **self }
|
||||
}
|
||||
|
||||
impl<T: ?Sized> Borrow<T> for boxed::Box<T> {
|
||||
fn borrow(&self) -> &T { &**self }
|
||||
}
|
||||
|
||||
impl<T: ?Sized> BorrowMut<T> for boxed::Box<T> {
|
||||
fn borrow_mut(&mut self) -> &mut T { &mut **self }
|
||||
}
|
||||
|
||||
impl<T: ?Sized> Borrow<T> for rc::Rc<T> {
|
||||
fn borrow(&self) -> &T { &**self }
|
||||
}
|
||||
|
@ -12,6 +12,7 @@ use std::collections::BTreeMap;
|
||||
use std::collections::Bound::{Excluded, Included, Unbounded, self};
|
||||
use std::collections::btree_map::Entry::{Occupied, Vacant};
|
||||
use std::iter::range_inclusive;
|
||||
use std::rc::Rc;
|
||||
|
||||
#[test]
|
||||
fn test_basic_large() {
|
||||
@ -198,6 +199,34 @@ fn test_range() {
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_borrow() {
|
||||
// make sure these compile -- using the Borrow trait
|
||||
{
|
||||
let mut map = BTreeMap::new();
|
||||
map.insert("0".to_string(), 1);
|
||||
assert_eq!(map["0"], 1);
|
||||
}
|
||||
|
||||
{
|
||||
let mut map = BTreeMap::new();
|
||||
map.insert(Box::new(0), 1);
|
||||
assert_eq!(map[&0], 1);
|
||||
}
|
||||
|
||||
{
|
||||
let mut map = BTreeMap::new();
|
||||
map.insert(Box::new([0, 1]) as Box<[i32]>, 1);
|
||||
assert_eq!(map[&[0, 1][..]], 1);
|
||||
}
|
||||
|
||||
{
|
||||
let mut map = BTreeMap::new();
|
||||
map.insert(Rc::new(0), 1);
|
||||
assert_eq!(map[&0], 1);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_entry(){
|
||||
let xs = [(1, 10), (2, 20), (3, 30), (4, 40), (5, 50), (6, 60)];
|
||||
|
Loading…
x
Reference in New Issue
Block a user