remove Any[Mut]RefExt traits in favor of impl Any

This commit is contained in:
Jorge Aparicio 2015-01-01 01:13:08 -05:00
parent c6c786671d
commit 5172b8046a
8 changed files with 12 additions and 35 deletions

View file

@ -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;

View file

@ -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

View file

@ -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;

View file

@ -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};

View file

@ -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;

View file

@ -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;

View file

@ -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 {
} }

View file

@ -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;