auto merge of #19252 : japaric/rust/cow, r=aturon
- Add `IntoCow` trait, and put it in the prelude
- Add `is_owned`/`is_borrowed` methods to `Cow`
- Add `CowString`/`CowVec` type aliases (to `Cow<'_, String, str>`/`Cow<'_, Vec, [T]>` respectively)
- `Cow` implements: `Show`, `Hash`, `[Partial]{Eq,Ord}`
- `impl BorrowFrom<Cow<'a, T, B>> for B`
[breaking-change]s:
- `IntoMaybeOwned` has been removed from the prelude
- libcollections: `SendStr` is now an alias to `CowString<'static>` (it was aliased to `MaybeOwned<'static>`)
- libgraphviz:
- `LabelText` variants now wrap `CowString` instead of `MaybeOwned`
- `Nodes` and `Edges` are now type aliases to `CowVec` (they were aliased to `MaybeOwnedVec`)
- libstd/path: `Display::as_maybe_owned` has been renamed to `Display::as_cow` and now returns a `CowString`
- These functions now accept/return `Cow` instead of `MaybeOwned[Vector]`:
- libregex: `Replacer::reg_replace`
- libcollections: `str::from_utf8_lossy`
- libgraphviz: `Id::new`, `Id::name`, `LabelText::pre_escaped_content`
- libstd: `TaskBuilder::named`
r? @aturon
This commit is contained in:
commit
8fb027e398
21 changed files with 323 additions and 169 deletions
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
fn main() {
|
||||
let r: Result<int,_> =
|
||||
::std::task::TaskBuilder::new().named("send name".into_maybe_owned())
|
||||
::std::task::TaskBuilder::new().named("send name".into_cow())
|
||||
.try(proc() {
|
||||
panic!("test");
|
||||
3i
|
||||
|
|
|
|||
|
|
@ -10,51 +10,51 @@
|
|||
|
||||
extern crate collections;
|
||||
|
||||
use std::str::{SendStr, Owned, Slice};
|
||||
use std::collections::HashMap;
|
||||
use std::option::Some;
|
||||
use std::str::SendStr;
|
||||
|
||||
pub fn main() {
|
||||
let mut map: HashMap<SendStr, uint> = HashMap::new();
|
||||
assert!(map.insert(Slice("foo"), 42).is_none());
|
||||
assert!(map.insert(Owned("foo".to_string()), 42).is_some());
|
||||
assert!(map.insert(Slice("foo"), 42).is_some());
|
||||
assert!(map.insert(Owned("foo".to_string()), 42).is_some());
|
||||
assert!(map.insert("foo".into_cow(), 42).is_none());
|
||||
assert!(map.insert("foo".to_string().into_cow(), 42).is_some());
|
||||
assert!(map.insert("foo".into_cow(), 42).is_some());
|
||||
assert!(map.insert("foo".to_string().into_cow(), 42).is_some());
|
||||
|
||||
assert!(map.insert(Slice("foo"), 43).is_some());
|
||||
assert!(map.insert(Owned("foo".to_string()), 44).is_some());
|
||||
assert!(map.insert(Slice("foo"), 45).is_some());
|
||||
assert!(map.insert(Owned("foo".to_string()), 46).is_some());
|
||||
assert!(map.insert("foo".into_cow(), 43).is_some());
|
||||
assert!(map.insert("foo".to_string().into_cow(), 44).is_some());
|
||||
assert!(map.insert("foo".into_cow(), 45).is_some());
|
||||
assert!(map.insert("foo".to_string().into_cow(), 46).is_some());
|
||||
|
||||
let v = 46;
|
||||
|
||||
assert_eq!(map.get(&Owned("foo".to_string())), Some(&v));
|
||||
assert_eq!(map.get(&Slice("foo")), Some(&v));
|
||||
assert_eq!(map.get(&"foo".to_string().into_cow()), Some(&v));
|
||||
assert_eq!(map.get(&"foo".into_cow()), Some(&v));
|
||||
|
||||
let (a, b, c, d) = (50, 51, 52, 53);
|
||||
|
||||
assert!(map.insert(Slice("abc"), a).is_none());
|
||||
assert!(map.insert(Owned("bcd".to_string()), b).is_none());
|
||||
assert!(map.insert(Slice("cde"), c).is_none());
|
||||
assert!(map.insert(Owned("def".to_string()), d).is_none());
|
||||
assert!(map.insert("abc".into_cow(), a).is_none());
|
||||
assert!(map.insert("bcd".to_string().into_cow(), b).is_none());
|
||||
assert!(map.insert("cde".into_cow(), c).is_none());
|
||||
assert!(map.insert("def".to_string().into_cow(), d).is_none());
|
||||
|
||||
assert!(map.insert(Slice("abc"), a).is_some());
|
||||
assert!(map.insert(Owned("bcd".to_string()), b).is_some());
|
||||
assert!(map.insert(Slice("cde"), c).is_some());
|
||||
assert!(map.insert(Owned("def".to_string()), d).is_some());
|
||||
assert!(map.insert("abc".into_cow(), a).is_some());
|
||||
assert!(map.insert("bcd".to_string().into_cow(), b).is_some());
|
||||
assert!(map.insert("cde".into_cow(), c).is_some());
|
||||
assert!(map.insert("def".to_string().into_cow(), d).is_some());
|
||||
|
||||
assert!(map.insert(Owned("abc".to_string()), a).is_some());
|
||||
assert!(map.insert(Slice("bcd"), b).is_some());
|
||||
assert!(map.insert(Owned("cde".to_string()), c).is_some());
|
||||
assert!(map.insert(Slice("def"), d).is_some());
|
||||
assert!(map.insert("abc".to_string().into_cow(), a).is_some());
|
||||
assert!(map.insert("bcd".into_cow(), b).is_some());
|
||||
assert!(map.insert("cde".to_string().into_cow(), c).is_some());
|
||||
assert!(map.insert("def".into_cow(), d).is_some());
|
||||
|
||||
assert_eq!(map.find_equiv("abc"), Some(&a));
|
||||
assert_eq!(map.find_equiv("bcd"), Some(&b));
|
||||
assert_eq!(map.find_equiv("cde"), Some(&c));
|
||||
assert_eq!(map.find_equiv("def"), Some(&d));
|
||||
assert_eq!(map.get("abc"), Some(&a));
|
||||
assert_eq!(map.get("bcd"), Some(&b));
|
||||
assert_eq!(map.get("cde"), Some(&c));
|
||||
assert_eq!(map.get("def"), Some(&d));
|
||||
|
||||
assert_eq!(map.find_equiv(&Slice("abc")), Some(&a));
|
||||
assert_eq!(map.find_equiv(&Slice("bcd")), Some(&b));
|
||||
assert_eq!(map.find_equiv(&Slice("cde")), Some(&c));
|
||||
assert_eq!(map.find_equiv(&Slice("def")), Some(&d));
|
||||
assert_eq!(map.get(&"abc".into_cow()), Some(&a));
|
||||
assert_eq!(map.get(&"bcd".into_cow()), Some(&b));
|
||||
assert_eq!(map.get(&"cde".into_cow()), Some(&c));
|
||||
assert_eq!(map.get(&"def".into_cow()), Some(&d));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,56 +10,56 @@
|
|||
|
||||
extern crate collections;
|
||||
|
||||
use std::str::{SendStr, Owned, Slice};
|
||||
use std::string::ToString;
|
||||
use self::collections::TreeMap;
|
||||
use std::option::Some;
|
||||
use std::str::SendStr;
|
||||
use std::string::ToString;
|
||||
|
||||
pub fn main() {
|
||||
let mut map: TreeMap<SendStr, uint> = TreeMap::new();
|
||||
assert!(map.insert(Slice("foo"), 42).is_none());
|
||||
assert!(map.insert(Owned("foo".to_string()), 42).is_some());
|
||||
assert!(map.insert(Slice("foo"), 42).is_some());
|
||||
assert!(map.insert(Owned("foo".to_string()), 42).is_some());
|
||||
assert!(map.insert("foo".into_cow(), 42).is_none());
|
||||
assert!(map.insert("foo".to_string().into_cow(), 42).is_some());
|
||||
assert!(map.insert("foo".into_cow(), 42).is_some());
|
||||
assert!(map.insert("foo".to_string().into_cow(), 42).is_some());
|
||||
|
||||
assert!(map.insert(Slice("foo"), 43).is_some());
|
||||
assert!(map.insert(Owned("foo".to_string()), 44).is_some());
|
||||
assert!(map.insert(Slice("foo"), 45).is_some());
|
||||
assert!(map.insert(Owned("foo".to_string()), 46).is_some());
|
||||
assert!(map.insert("foo".into_cow(), 43).is_some());
|
||||
assert!(map.insert("foo".to_string().into_cow(), 44).is_some());
|
||||
assert!(map.insert("foo".into_cow(), 45).is_some());
|
||||
assert!(map.insert("foo".to_string().into_cow(), 46).is_some());
|
||||
|
||||
let v = 46;
|
||||
|
||||
assert_eq!(map.get(&Owned("foo".to_string())), Some(&v));
|
||||
assert_eq!(map.get(&Slice("foo")), Some(&v));
|
||||
assert_eq!(map.get(&"foo".to_string().into_cow()), Some(&v));
|
||||
assert_eq!(map.get(&"foo".into_cow()), Some(&v));
|
||||
|
||||
let (a, b, c, d) = (50, 51, 52, 53);
|
||||
|
||||
assert!(map.insert(Slice("abc"), a).is_none());
|
||||
assert!(map.insert(Owned("bcd".to_string()), b).is_none());
|
||||
assert!(map.insert(Slice("cde"), c).is_none());
|
||||
assert!(map.insert(Owned("def".to_string()), d).is_none());
|
||||
assert!(map.insert("abc".into_cow(), a).is_none());
|
||||
assert!(map.insert("bcd".to_string().into_cow(), b).is_none());
|
||||
assert!(map.insert("cde".into_cow(), c).is_none());
|
||||
assert!(map.insert("def".to_string().into_cow(), d).is_none());
|
||||
|
||||
assert!(map.insert(Slice("abc"), a).is_some());
|
||||
assert!(map.insert(Owned("bcd".to_string()), b).is_some());
|
||||
assert!(map.insert(Slice("cde"), c).is_some());
|
||||
assert!(map.insert(Owned("def".to_string()), d).is_some());
|
||||
assert!(map.insert("abc".into_cow(), a).is_some());
|
||||
assert!(map.insert("bcd".to_string().into_cow(), b).is_some());
|
||||
assert!(map.insert("cde".into_cow(), c).is_some());
|
||||
assert!(map.insert("def".to_string().into_cow(), d).is_some());
|
||||
|
||||
assert!(map.insert(Owned("abc".to_string()), a).is_some());
|
||||
assert!(map.insert(Slice("bcd"), b).is_some());
|
||||
assert!(map.insert(Owned("cde".to_string()), c).is_some());
|
||||
assert!(map.insert(Slice("def"), d).is_some());
|
||||
assert!(map.insert("abc".to_string().into_cow(), a).is_some());
|
||||
assert!(map.insert("bcd".into_cow(), b).is_some());
|
||||
assert!(map.insert("cde".to_string().into_cow(), c).is_some());
|
||||
assert!(map.insert("def".into_cow(), d).is_some());
|
||||
|
||||
assert_eq!(map.get(&Slice("abc")), Some(&a));
|
||||
assert_eq!(map.get(&Slice("bcd")), Some(&b));
|
||||
assert_eq!(map.get(&Slice("cde")), Some(&c));
|
||||
assert_eq!(map.get(&Slice("def")), Some(&d));
|
||||
assert_eq!(map.get(&"abc".into_cow()), Some(&a));
|
||||
assert_eq!(map.get(&"bcd".into_cow()), Some(&b));
|
||||
assert_eq!(map.get(&"cde".into_cow()), Some(&c));
|
||||
assert_eq!(map.get(&"def".into_cow()), Some(&d));
|
||||
|
||||
assert_eq!(map.get(&Owned("abc".to_string())), Some(&a));
|
||||
assert_eq!(map.get(&Owned("bcd".to_string())), Some(&b));
|
||||
assert_eq!(map.get(&Owned("cde".to_string())), Some(&c));
|
||||
assert_eq!(map.get(&Owned("def".to_string())), Some(&d));
|
||||
assert_eq!(map.get(&"abc".to_string().into_cow()), Some(&a));
|
||||
assert_eq!(map.get(&"bcd".to_string().into_cow()), Some(&b));
|
||||
assert_eq!(map.get(&"cde".to_string().into_cow()), Some(&c));
|
||||
assert_eq!(map.get(&"def".to_string().into_cow()), Some(&d));
|
||||
|
||||
assert!(map.remove(&Slice("foo")).is_some());
|
||||
assert!(map.remove(&"foo".into_cow()).is_some());
|
||||
assert_eq!(map.into_iter().map(|(k, v)| format!("{}{}", k, v))
|
||||
.collect::<Vec<String>>()
|
||||
.concat(),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue