diff options
| author | Eduard Burtescu <edy.burt@gmail.com> | 2014-02-26 23:07:23 +0200 |
|---|---|---|
| committer | Eduard Burtescu <edy.burt@gmail.com> | 2014-03-04 16:41:48 +0200 |
| commit | 52532d13a6e72e4bf7f931a93f902de47d667baf (patch) | |
| tree | ea0a5c30d91d54838a544b0263fc1f26a4b22ead /src | |
| parent | 3b125ff3bbe77a8601ba2d424e8aa6f254abfd19 (diff) | |
| download | rust-52532d13a6e72e4bf7f931a93f902de47d667baf.tar.gz rust-52532d13a6e72e4bf7f931a93f902de47d667baf.zip | |
Implement DerefImm for Rc and DerefImm/DerefMut for RefCell's Ref/RefMut.
Diffstat (limited to 'src')
| -rw-r--r-- | src/libstd/cell.rs | 23 | ||||
| -rw-r--r-- | src/libstd/rc.rs | 10 |
2 files changed, 31 insertions, 2 deletions
diff --git a/src/libstd/cell.rs b/src/libstd/cell.rs index 12524499a32..f4b530644a7 100644 --- a/src/libstd/cell.rs +++ b/src/libstd/cell.rs @@ -15,7 +15,7 @@ use clone::{Clone, DeepClone}; use cmp::Eq; use fmt; use kinds::{marker, Pod}; -use ops::Drop; +use ops::{Deref, DerefMut, Drop}; use option::{None, Option, Some}; /// A mutable memory location that admits only `Pod` data. @@ -258,6 +258,13 @@ impl<'b, T> Ref<'b, T> { } } +impl<'b, T> Deref<T> for Ref<'b, T> { + #[inline] + fn deref<'a>(&'a self) -> &'a T { + &self.parent.value + } +} + /// Wraps a mutable borrowed reference to a value in a `RefCell` box. pub struct RefMut<'b, T> { priv parent: &'b mut RefCell<T> @@ -279,6 +286,20 @@ impl<'b, T> RefMut<'b, T> { } } +impl<'b, T> Deref<T> for RefMut<'b, T> { + #[inline] + fn deref<'a>(&'a self) -> &'a T { + &self.parent.value + } +} + +impl<'b, T> DerefMut<T> for RefMut<'b, T> { + #[inline] + fn deref_mut<'a>(&'a mut self) -> &'a mut T { + &mut self.parent.value + } +} + #[cfg(test)] mod test { use super::*; diff --git a/src/libstd/rc.rs b/src/libstd/rc.rs index ea3d5e0edac..5daf6e797be 100644 --- a/src/libstd/rc.rs +++ b/src/libstd/rc.rs @@ -27,7 +27,7 @@ use cast::transmute; use clone::{Clone, DeepClone}; use cmp::{Eq, Ord}; use kinds::marker; -use ops::Drop; +use ops::{Deref, Drop}; use option::{Option, Some, None}; use ptr; use rt::global_heap::exchange_free; @@ -78,6 +78,14 @@ impl<T> Rc<T> { } } +impl<T> Deref<T> for Rc<T> { + /// Borrow the value contained in the reference-counted box + #[inline(always)] + fn deref<'a>(&'a self) -> &'a T { + unsafe { &(*self.ptr).value } + } +} + #[unsafe_destructor] impl<T> Drop for Rc<T> { fn drop(&mut self) { |
