remove Any[Mut]RefExt
traits in favor of impl Any
This commit is contained in:
parent
c6c786671d
commit
5172b8046a
8 changed files with 12 additions and 35 deletions
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
#![stable]
|
#![stable]
|
||||||
|
|
||||||
use core::any::{Any, AnyRefExt};
|
use core::any::Any;
|
||||||
use core::clone::Clone;
|
use core::clone::Clone;
|
||||||
use core::cmp::{PartialEq, PartialOrd, Eq, Ord, Ordering};
|
use core::cmp::{PartialEq, PartialOrd, Eq, Ord, Ordering};
|
||||||
use core::default::Default;
|
use core::default::Default;
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
//!
|
//!
|
||||||
//! ```rust
|
//! ```rust
|
||||||
//! use std::fmt::Show;
|
//! use std::fmt::Show;
|
||||||
//! use std::any::{Any, AnyRefExt};
|
//! use std::any::Any;
|
||||||
//!
|
//!
|
||||||
//! // Logger function for any type that implements Show.
|
//! // Logger function for any type that implements Show.
|
||||||
//! fn log<T: Any+Show>(value: &T) {
|
//! fn log<T: Any+Show>(value: &T) {
|
||||||
|
@ -102,24 +102,11 @@ impl<T: 'static> Any for T {
|
||||||
// Implemented as three extension traits so that the methods can be generic.
|
// Implemented as three extension traits so that the methods can be generic.
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
/// Extension methods for a referenced `Any` trait object
|
impl Any {
|
||||||
#[unstable = "this trait will not be necessary once DST lands, it will be a \
|
|
||||||
part of `impl Any`"]
|
|
||||||
pub trait AnyRefExt<'a> {
|
|
||||||
/// Returns true if the boxed type is the same as `T`
|
/// Returns true if the boxed type is the same as `T`
|
||||||
#[stable]
|
#[stable]
|
||||||
fn is<T: 'static>(self) -> bool;
|
|
||||||
|
|
||||||
/// Returns some reference to the boxed value if it is of type `T`, or
|
|
||||||
/// `None` if it isn't.
|
|
||||||
#[unstable = "naming conventions around acquiring references may change"]
|
|
||||||
fn downcast_ref<T: 'static>(self) -> Option<&'a T>;
|
|
||||||
}
|
|
||||||
|
|
||||||
#[stable]
|
|
||||||
impl<'a> AnyRefExt<'a> for &'a Any {
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn is<T: 'static>(self) -> bool {
|
pub fn is<T: 'static>(&self) -> bool {
|
||||||
// Get TypeId of the type this function is instantiated with
|
// Get TypeId of the type this function is instantiated with
|
||||||
let t = TypeId::of::<T>();
|
let t = TypeId::of::<T>();
|
||||||
|
|
||||||
|
@ -130,8 +117,11 @@ impl<'a> AnyRefExt<'a> for &'a Any {
|
||||||
t == boxed
|
t == boxed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns some reference to the boxed value if it is of type `T`, or
|
||||||
|
/// `None` if it isn't.
|
||||||
|
#[unstable = "naming conventions around acquiring references may change"]
|
||||||
#[inline]
|
#[inline]
|
||||||
fn downcast_ref<T: 'static>(self) -> Option<&'a T> {
|
pub fn downcast_ref<'a, T: 'static>(&'a self) -> Option<&'a T> {
|
||||||
if self.is::<T>() {
|
if self.is::<T>() {
|
||||||
unsafe {
|
unsafe {
|
||||||
// Get the raw representation of the trait object
|
// Get the raw representation of the trait object
|
||||||
|
@ -144,22 +134,12 @@ impl<'a> AnyRefExt<'a> for &'a Any {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/// Extension methods for a mutable referenced `Any` trait object
|
|
||||||
#[unstable = "this trait will not be necessary once DST lands, it will be a \
|
|
||||||
part of `impl Any`"]
|
|
||||||
pub trait AnyMutRefExt<'a> {
|
|
||||||
/// Returns some mutable reference to the boxed value if it is of type `T`, or
|
/// Returns some mutable reference to the boxed value if it is of type `T`, or
|
||||||
/// `None` if it isn't.
|
/// `None` if it isn't.
|
||||||
#[unstable = "naming conventions around acquiring references may change"]
|
#[unstable = "naming conventions around acquiring references may change"]
|
||||||
fn downcast_mut<T: 'static>(self) -> Option<&'a mut T>;
|
|
||||||
}
|
|
||||||
|
|
||||||
#[stable]
|
|
||||||
impl<'a> AnyMutRefExt<'a> for &'a mut Any {
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn downcast_mut<T: 'static>(self) -> Option<&'a mut T> {
|
pub fn downcast_mut<'a, T: 'static>(&'a mut self) -> Option<&'a mut T> {
|
||||||
if self.is::<T>() {
|
if self.is::<T>() {
|
||||||
unsafe {
|
unsafe {
|
||||||
// Get the raw representation of the trait object
|
// Get the raw representation of the trait object
|
||||||
|
|
|
@ -54,7 +54,6 @@ use rustc::lint;
|
||||||
use rustc::metadata;
|
use rustc::metadata;
|
||||||
use rustc::DIAGNOSTICS;
|
use rustc::DIAGNOSTICS;
|
||||||
|
|
||||||
use std::any::AnyRefExt;
|
|
||||||
use std::cmp::Ordering::Equal;
|
use std::cmp::Ordering::Equal;
|
||||||
use std::io;
|
use std::io;
|
||||||
use std::iter::repeat;
|
use std::iter::repeat;
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
use prelude::v1::*;
|
use prelude::v1::*;
|
||||||
|
|
||||||
use any::{Any, AnyRefExt};
|
use any::Any;
|
||||||
use cell::RefCell;
|
use cell::RefCell;
|
||||||
use io::IoResult;
|
use io::IoResult;
|
||||||
use rt::{backtrace, unwind};
|
use rt::{backtrace, unwind};
|
||||||
|
|
|
@ -442,7 +442,7 @@ impl<T: Send> Drop for JoinGuard<T> {
|
||||||
mod test {
|
mod test {
|
||||||
use prelude::v1::*;
|
use prelude::v1::*;
|
||||||
|
|
||||||
use any::{Any, AnyRefExt};
|
use any::Any;
|
||||||
use sync::mpsc::{channel, Sender};
|
use sync::mpsc::{channel, Sender};
|
||||||
use boxed::BoxAny;
|
use boxed::BoxAny;
|
||||||
use result;
|
use result;
|
||||||
|
|
|
@ -58,7 +58,7 @@ use serialize::{json, Decodable, Encodable};
|
||||||
use term::Terminal;
|
use term::Terminal;
|
||||||
use term::color::{Color, RED, YELLOW, GREEN, CYAN};
|
use term::color::{Color, RED, YELLOW, GREEN, CYAN};
|
||||||
|
|
||||||
use std::any::{Any, AnyRefExt};
|
use std::any::Any;
|
||||||
use std::cmp;
|
use std::cmp;
|
||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
use std::f64;
|
use std::f64;
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
// Test that Copy bounds inherited by trait are checked.
|
// Test that Copy bounds inherited by trait are checked.
|
||||||
|
|
||||||
use std::any::Any;
|
use std::any::Any;
|
||||||
use std::any::AnyRefExt;
|
|
||||||
|
|
||||||
trait Foo : Copy {
|
trait Foo : Copy {
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
// traits.
|
// traits.
|
||||||
|
|
||||||
use std::any::Any;
|
use std::any::Any;
|
||||||
use std::any::AnyRefExt;
|
|
||||||
|
|
||||||
trait Wrap {
|
trait Wrap {
|
||||||
fn get(&self) -> int;
|
fn get(&self) -> int;
|
||||||
|
|
Loading…
Reference in a new issue