about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorKevin Ballard <kevin@sb.org>2013-08-01 15:54:58 -0700
committerKevin Ballard <kevin@sb.org>2013-08-01 15:54:58 -0700
commitaa94dfa625e0d19cd322d7816167486ece53397d (patch)
tree7e1a470d8d4fbd0d06a5adc6ab12e8533460835a /src/libstd
parent82b24559e6aa0914f8a49e0a9dbfb3cf35372515 (diff)
downloadrust-aa94dfa625e0d19cd322d7816167486ece53397d.tar.gz
rust-aa94dfa625e0d19cd322d7816167486ece53397d.zip
str: Add method .into_owned(self) -> ~str to Str
The method .into_owned() is meant to be used as an optimization when you
need to get a ~str from a Str, but don't want to unnecessarily copy it
if it's already a ~str.

This is meant to ease functions that look like

  fn foo<S: Str>(strs: &[S])

Previously they could work with the strings as slices using .as_slice(),
but producing ~str required copying the string, even if the vector
turned out be a &[~str] already.
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/str.rs12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/libstd/str.rs b/src/libstd/str.rs
index f0c0595744c..c30888529be 100644
--- a/src/libstd/str.rs
+++ b/src/libstd/str.rs
@@ -1079,11 +1079,17 @@ pub mod traits {}
 pub trait Str {
     /// Work with `self` as a slice.
     fn as_slice<'a>(&'a self) -> &'a str;
+
+    /// Convert `self` into a ~str.
+    fn into_owned(self) -> ~str;
 }
 
 impl<'self> Str for &'self str {
     #[inline]
     fn as_slice<'a>(&'a self) -> &'a str { *self }
+
+    #[inline]
+    fn into_owned(self) -> ~str { self.to_owned() }
 }
 
 impl<'self> Str for ~str {
@@ -1091,6 +1097,9 @@ impl<'self> Str for ~str {
     fn as_slice<'a>(&'a self) -> &'a str {
         let s: &'a str = *self; s
     }
+
+    #[inline]
+    fn into_owned(self) -> ~str { self }
 }
 
 impl<'self> Str for @str {
@@ -1098,6 +1107,9 @@ impl<'self> Str for @str {
     fn as_slice<'a>(&'a self) -> &'a str {
         let s: &'a str = *self; s
     }
+
+    #[inline]
+    fn into_owned(self) -> ~str { self.to_owned() }
 }
 
 impl<'self> Container for &'self str {