Also renames the `Container` trait to `Collection`.
[breaking-change]
}
}
-impl Container for BitvSet {
+impl Collection for BitvSet {
#[inline]
fn len(&self) -> uint { self.size }
}
Some(next)
}
-impl<T> Container for DList<T> {
+impl<T> Collection for DList<T> {
/// O(1)
#[inline]
fn is_empty(&self) -> bool {
data: Vec<T>,
}
-impl<T: Ord> Container for PriorityQueue<T> {
+impl<T: Ord> Collection for PriorityQueue<T> {
/// Returns the length of the queue
fn len(&self) -> uint { self.data.len() }
}
elts: Vec<Option<T>>
}
-impl<T> Container for RingBuf<T> {
+impl<T> Collection for RingBuf<T> {
/// Return the number of elements in the RingBuf
fn len(&self) -> uint { self.nelts }
}
v: Vec<Option<T>>,
}
-impl<V> Container for SmallIntMap<V> {
+impl<V> Collection for SmallIntMap<V> {
/// Return the number of elements in the map
fn len(&self) -> uint {
self.v.iter().filter(|elt| elt.is_some()).count()
}
}
-impl<'a> Container for MaybeOwned<'a> {
+impl<'a> Collection for MaybeOwned<'a> {
#[inline]
fn len(&self) -> uint { self.as_slice().len() }
}
#[test]
fn test_str_container() {
- fn sum_len<S: Container>(v: &[S]) -> uint {
+ fn sum_len<S: Collection>(v: &[S]) -> uint {
v.iter().map(|x| x.len()).sum()
}
}
}
-impl Container for String {
+impl Collection for String {
#[inline]
fn len(&self) -> uint {
self.vec.len()
}
}
-impl<K: Ord, V> Container for TreeMap<K, V> {
+impl<K: Ord, V> Collection for TreeMap<K, V> {
fn len(&self) -> uint { self.length }
}
}
}
-impl<T: Ord> Container for TreeSet<T> {
+impl<T: Ord> Collection for TreeSet<T> {
#[inline]
fn len(&self) -> uint { self.map.len() }
}
length: uint
}
-impl<T> Container for TrieMap<T> {
+impl<T> Collection for TrieMap<T> {
/// Return the number of elements in the map
#[inline]
fn len(&self) -> uint { self.length }
map: TrieMap<()>
}
-impl Container for TrieSet {
+impl Collection for TrieSet {
/// Return the number of elements in the set
#[inline]
fn len(&self) -> uint { self.map.len() }
}
}
-impl<T> Container for Vec<T> {
+impl<T> Collection for Vec<T> {
#[inline]
fn len(&self) -> uint {
self.len
--- /dev/null
+// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+//! Traits for generic collections (including `Map` and `Set`)
+
+use option::Option;
+
+/// A trait to represent the abstract idea of a container. The only concrete
+/// knowledge known is the number of elements contained within.
+pub trait Collection {
+ /// Return the number of elements in the container
+ fn len(&self) -> uint;
+
+ /// Return true if the container contains no elements
+ #[inline]
+ fn is_empty(&self) -> bool {
+ self.len() == 0
+ }
+}
+
+/// A trait to represent mutable containers
+pub trait Mutable: Collection {
+ /// Clear the container, removing all values.
+ fn clear(&mut self);
+}
+
+/// A map is a key-value store where values may be looked up by their keys. This
+/// trait provides basic operations to operate on these stores.
+pub trait Map<K, V>: Collection {
+ /// Return a reference to the value corresponding to the key
+ fn find<'a>(&'a self, key: &K) -> Option<&'a V>;
+
+ /// Return true if the map contains a value for the specified key
+ #[inline]
+ fn contains_key(&self, key: &K) -> bool {
+ self.find(key).is_some()
+ }
+}
+
+/// This trait provides basic operations to modify the contents of a map.
+pub trait MutableMap<K, V>: Map<K, V> + Mutable {
+ /// Insert a key-value pair into the map. An existing value for a
+ /// key is replaced by the new value. Return true if the key did
+ /// not already exist in the map.
+ #[inline]
+ fn insert(&mut self, key: K, value: V) -> bool {
+ self.swap(key, value).is_none()
+ }
+
+ /// Remove a key-value pair from the map. Return true if the key
+ /// was present in the map, otherwise false.
+ #[inline]
+ fn remove(&mut self, key: &K) -> bool {
+ self.pop(key).is_some()
+ }
+
+ /// Insert a key-value pair from the map. If the key already had a value
+ /// present in the map, that value is returned. Otherwise None is returned.
+ fn swap(&mut self, k: K, v: V) -> Option<V>;
+
+ /// Removes a key from the map, returning the value at the key if the key
+ /// was previously in the map.
+ fn pop(&mut self, k: &K) -> Option<V>;
+
+ /// Return a mutable reference to the value corresponding to the key
+ fn find_mut<'a>(&'a mut self, key: &K) -> Option<&'a mut V>;
+}
+
+/// A set is a group of objects which are each distinct from one another. This
+/// trait represents actions which can be performed on sets to iterate over
+/// them.
+pub trait Set<T>: Collection {
+ /// Return true if the set contains a value
+ fn contains(&self, value: &T) -> bool;
+
+ /// Return true if the set has no elements in common with `other`.
+ /// This is equivalent to checking for an empty intersection.
+ fn is_disjoint(&self, other: &Self) -> bool;
+
+ /// Return true if the set is a subset of another
+ fn is_subset(&self, other: &Self) -> bool;
+
+ /// Return true if the set is a superset of another
+ fn is_superset(&self, other: &Self) -> bool {
+ other.is_subset(self)
+ }
+
+ // FIXME #8154: Add difference, sym. difference, intersection and union iterators
+}
+
+/// This trait represents actions which can be performed on sets to mutate
+/// them.
+pub trait MutableSet<T>: Set<T> + Mutable {
+ /// Add a value to the set. Return true if the value was not already
+ /// present in the set.
+ fn insert(&mut self, value: T) -> bool;
+
+ /// Remove a value from the set. Return true if the value was
+ /// present in the set.
+ fn remove(&mut self, value: &T) -> bool;
+}
+++ /dev/null
-// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-//! Traits for generic containers (including `Map` and `Set`)
-
-use option::Option;
-
-/// A trait to represent the abstract idea of a container. The only concrete
-/// knowledge known is the number of elements contained within.
-pub trait Container {
- /// Return the number of elements in the container
- fn len(&self) -> uint;
-
- /// Return true if the container contains no elements
- #[inline]
- fn is_empty(&self) -> bool {
- self.len() == 0
- }
-}
-
-/// A trait to represent mutable containers
-pub trait Mutable: Container {
- /// Clear the container, removing all values.
- fn clear(&mut self);
-}
-
-/// A map is a key-value store where values may be looked up by their keys. This
-/// trait provides basic operations to operate on these stores.
-pub trait Map<K, V>: Container {
- /// Return a reference to the value corresponding to the key
- fn find<'a>(&'a self, key: &K) -> Option<&'a V>;
-
- /// Return true if the map contains a value for the specified key
- #[inline]
- fn contains_key(&self, key: &K) -> bool {
- self.find(key).is_some()
- }
-}
-
-/// This trait provides basic operations to modify the contents of a map.
-pub trait MutableMap<K, V>: Map<K, V> + Mutable {
- /// Insert a key-value pair into the map. An existing value for a
- /// key is replaced by the new value. Return true if the key did
- /// not already exist in the map.
- #[inline]
- fn insert(&mut self, key: K, value: V) -> bool {
- self.swap(key, value).is_none()
- }
-
- /// Remove a key-value pair from the map. Return true if the key
- /// was present in the map, otherwise false.
- #[inline]
- fn remove(&mut self, key: &K) -> bool {
- self.pop(key).is_some()
- }
-
- /// Insert a key-value pair from the map. If the key already had a value
- /// present in the map, that value is returned. Otherwise None is returned.
- fn swap(&mut self, k: K, v: V) -> Option<V>;
-
- /// Removes a key from the map, returning the value at the key if the key
- /// was previously in the map.
- fn pop(&mut self, k: &K) -> Option<V>;
-
- /// Return a mutable reference to the value corresponding to the key
- fn find_mut<'a>(&'a mut self, key: &K) -> Option<&'a mut V>;
-}
-
-/// A set is a group of objects which are each distinct from one another. This
-/// trait represents actions which can be performed on sets to iterate over
-/// them.
-pub trait Set<T>: Container {
- /// Return true if the set contains a value
- fn contains(&self, value: &T) -> bool;
-
- /// Return true if the set has no elements in common with `other`.
- /// This is equivalent to checking for an empty intersection.
- fn is_disjoint(&self, other: &Self) -> bool;
-
- /// Return true if the set is a subset of another
- fn is_subset(&self, other: &Self) -> bool;
-
- /// Return true if the set is a superset of another
- fn is_superset(&self, other: &Self) -> bool {
- other.is_subset(self)
- }
-
- // FIXME #8154: Add difference, sym. difference, intersection and union iterators
-}
-
-/// This trait represents actions which can be performed on sets to mutate
-/// them.
-pub trait MutableSet<T>: Set<T> + Mutable {
- /// Add a value to the set. Return true if the value was not already
- /// present in the set.
- fn insert(&mut self, value: T) -> bool;
-
- /// Remove a value from the set. Return true if the value was
- /// present in the set.
- fn remove(&mut self, value: &T) -> bool;
-}
#![allow(missing_doc)]
use char;
-use container::Container;
+use collections::Collection;
use fmt;
use iter::{Iterator, range, DoubleEndedIterator};
use num::{Float, FPNaN, FPInfinite, ToPrimitive, Primitive};
use any;
use cell::Cell;
use char::Char;
-use container::Container;
+use collections::Collection;
use iter::{Iterator, range};
use kinds::Copy;
use mem;
#![allow(unsigned_negate)]
-use container::Container;
+use collections::Collection;
use fmt;
use iter::{Iterator, DoubleEndedIterator};
use num::{Int, cast, zero};
#[cfg(not(test))] pub mod cmp;
pub mod clone;
pub mod default;
-pub mod container;
+pub mod collections;
/* Core types and methods on primitives */
pub use clone::Clone;
pub use cmp::{PartialEq, PartialOrd, Eq, Ord};
pub use cmp::{Ordering, Less, Equal, Greater, Equiv};
-pub use container::{Container, Mutable, Map, MutableMap, Set, MutableSet};
+pub use collections::Collection;
pub use iter::{FromIterator, Extendable};
pub use iter::{Iterator, DoubleEndedIterator, RandomAccessIterator, CloneableIterator};
pub use iter::{OrdIterator, MutableDoubleEndedIterator, ExactSize};
// Currently, no progress has been made on this list.
use clone::Clone;
-use container::Container;
+use collections::Collection;
use finally::try_finally;
use intrinsics;
use iter::{range, Iterator};
use mem::transmute;
use clone::Clone;
-use container::Container;
+use collections::Collection;
use cmp::{PartialEq, Ord, Ordering, Less, Equal, Greater};
use cmp;
use default::Default;
use cmp::{PartialEq, PartialOrd, Eq, Ord, Ordering, Equiv};
use iter::order;
- use container::Container;
+ use collections::Collection;
impl<'a,T:PartialEq> PartialEq for &'a [T] {
fn eq(&self, other: & &'a [T]) -> bool {
fn as_slice<'a>(&'a self) -> &'a [T] { let v: &'a [T] = *self; v }
}
-impl<'a, T> Container for &'a [T] {
+impl<'a, T> Collection for &'a [T] {
/// Returns the length of a vector
#[inline]
fn len(&self) -> uint {
}
}
-impl<T> Container for ~[T] {
+impl<T> Collection for ~[T] {
/// Returns the length of a vector
#[inline]
fn len(&self) -> uint {
/// Operations on `[u8]`.
pub mod bytes {
- use container::Container;
+ use collections::Collection;
use ptr;
use slice::MutableVector;
use clone::Clone;
use cmp;
use cmp::{PartialEq, Eq};
-use container::Container;
+use collections::Collection;
use default::Default;
use iter::{Filter, Map, Iterator};
use iter::{DoubleEndedIterator, ExactSize};
/// Unsafe operations
pub mod raw {
use mem;
- use container::Container;
+ use collections::Collection;
use ptr::RawPtr;
use raw::Slice;
use slice::{ImmutableVector};
#[cfg(not(test))]
#[allow(missing_doc)]
pub mod traits {
- use container::Container;
use cmp::{Ord, Ordering, Less, Equal, Greater, PartialEq, PartialOrd, Equiv, Eq};
+ use collections::Collection;
use iter::Iterator;
use option::{Some, None};
use str::{Str, StrSlice, eq_slice};
fn as_slice<'a>(&'a self) -> &'a str { *self }
}
-impl<'a> Container for &'a str {
+impl<'a> Collection for &'a str {
#[inline]
fn len(&self) -> uint {
self.repr().len
}
}
-impl<'t> Container for Captures<'t> {
+impl<'t> Collection for Captures<'t> {
/// Returns the number of captured groups.
#[inline]
fn len(&self) -> uint {
#![allow(unsigned_negate)]
-use std::container::Map;
use libc::c_ulonglong;
use std::num::{Bitwise};
use std::rc::Rc;
}
}
-impl Container for CString {
+impl Collection for CString {
/// Return the number of bytes in the CString (not including the NUL terminator).
///
/// # Failure
//! Operations on ASCII strings and characters
-use container::Container;
+use collections::Collection;
use fmt;
use iter::Iterator;
use mem;
//! handled correctly, i.e. that allocated memory is eventually freed
//! if necessary.
-use container::Container;
+use collections::Collection;
use kinds::Send;
use mem;
use ops::Drop;
}
}
-impl<T> Container for CVec<T> {
+impl<T> Collection for CVec<T> {
fn len(&self) -> uint { self.len }
}
impl<T: Eq + Hash<S>, S, H: Hasher<S>> Eq for HashSet<T, H> {}
-impl<T: Eq + Hash<S>, S, H: Hasher<S>> Container for HashSet<T, H> {
+impl<T: Eq + Hash<S>, S, H: Hasher<S>> Collection for HashSet<T, H> {
fn len(&self) -> uint { self.map.len() }
}
use prelude::*;
use super::HashSet;
- use container::Container;
use slice::ImmutableEqVector;
+ use std::collections::Collection;
#[test]
fn test_disjoint() {
}
}
-impl<K: Hash + Eq, V> Container for LruCache<K, V> {
+impl<K: Hash + Eq, V> Collection for LruCache<K, V> {
/// Return the number of key-value pairs in the cache.
fn len(&self) -> uint {
self.map.len()
/// of a synchronous channel. There are a few branches for the unbuffered case,
/// but they're mostly just relevant to blocking senders.
-use container::Container;
+use collections::Collection;
use iter::Iterator;
use kinds::Send;
use mem;
//! Buffering wrappers for I/O traits
use cmp;
-use container::Container;
+use collections::Collection;
use io::{Reader, Writer, Stream, Buffer, DEFAULT_BUF_SIZE, IoResult};
use iter::ExactSize;
use ops::Drop;
use clone::Clone;
use cmp;
-use container::Container;
+use collections::Collection;
use comm::{Sender, Receiver};
use io;
use option::{None, Option, Some};
// FIXME: Not sure how this should be structured
// FIXME: Iteration should probably be considered separately
-use container::Container;
+use collections::Collection;
use iter::Iterator;
use option::{Option, Some, None};
use result::{Ok, Err};
mod bench {
extern crate test;
- use container::Container;
+ use collections::Collection;
use prelude::*;
use self::test::Bencher;
use c_str::ToCStr;
use clone::Clone;
-use container::Container;
+use collections::Collection;
use io;
use iter::Iterator;
use kinds::Send;
//! Readers and Writers for in-memory buffers
use cmp::min;
-use container::Container;
+use collections::Collection;
use option::None;
use result::{Err, Ok};
use io;
#![deny(unused_must_use)]
use char::Char;
-use container::Container;
+use collections::Collection;
use fmt;
use int;
use iter::Iterator;
#![allow(missing_doc)]
-use container::Container;
+use collections::Collection;
use fmt;
use from_str::FromStr;
use iter::Iterator;
pub use core::char;
pub use core::clone;
#[cfg(not(test))] pub use core::cmp;
-pub use core::container;
+pub use core::collections;
pub use core::default;
pub use core::finally;
pub use core::intrinsics;
use char;
use clone::Clone;
-use container::Container;
+use collections::Collection;
use num::{NumCast, Zero, One, cast, Int};
use num::{Float, FPNaN, FPInfinite, ToPrimitive};
use num;
#![allow(non_snake_case_functions)]
use clone::Clone;
-use container::Container;
+use collections::Collection;
use fmt;
use iter::Iterator;
use libc::{c_void, c_int};
#![deny(deprecated_owned_vector)]
-use container::Container;
+use collections::Collection;
use c_str::CString;
use clone::Clone;
use fmt;
use c_str::{CString, ToCStr};
use clone::Clone;
use cmp::{PartialEq, Eq};
-use container::Container;
+use collections::Collection;
use from_str::FromStr;
use hash;
use io::Writer;
#![allow(non_camel_case_types)]
use char::Char;
-use container::Container;
+use collections::Collection;
use from_str::from_str;
use io::{IoResult, Writer};
use iter::Iterator;
#[cfg(not(target_os = "macos"))]
fn print(w: &mut Writer, idx: int, addr: *libc::c_void) -> IoResult<()> {
- use container::Container;
+ use collections::Collection;
use iter::Iterator;
use os;
use path::GenericPath;
impl<T: Eq> Eq for OwnedSlice<T> {}
-impl<T> Container for OwnedSlice<T> {
+impl<T> Collection for OwnedSlice<T> {
fn len(&self) -> uint { self.len }
}
Many(Vec<T> ),
}
-impl<T> Container for SmallVector<T> {
+impl<T> Collection for SmallVector<T> {
fn len(&self) -> uint {
match self.repr {
Zero => 0,
let x: Box<HashMap<int, int>> = box HashMap::new();
let x: Box<Map<int, int>> = x;
let y: Box<Map<uint, int>> = box x;
- //~^ ERROR failed to find an implementation of trait core::container::Map<uint,int>
- // for ~core::container::Map<int,int>:Send
+ //~^ ERROR failed to find an implementation of trait core::collections::Map<uint,int>
+ // for ~core::collections::Map<int,int>:Send
}
}
}
-impl<T> Container for cat<T> {
+impl<T> Collection for cat<T> {
fn len(&self) -> uint { self.meows as uint }
fn is_empty(&self) -> bool { self.meows == 0 }
}
extern crate collections;
-use std::container::{Map, MutableMap};
+use std::collections::{Map, MutableMap};
use std::str::{SendStr, Owned, Slice};
use std::collections::HashMap;
use std::option::Some;
extern crate collections;
-use std::container::{ Map, MutableMap};
+use std::collections::{ Map, MutableMap};
use std::str::{SendStr, Owned, Slice};
use std::to_str::ToStr;
use self::collections::TreeMap;