提交 61fbdbba 编写于 作者: G Guillaume Gomez

Add Debug implementations for libcollection structs

上级 a52da95c
......@@ -228,6 +228,20 @@ pub struct PeekMut<'a, T: 'a + Ord> {
sift: bool,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: Ord> fmt::Debug for PeekMut<'a, T> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("PeekMut { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: Ord + fmt::Debug> fmt::Debug for PeekMut<'a, T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad(&format!("PeekMut({:?})", self.heap.data[0]))
}
}
#[stable(feature = "binary_heap_peek_mut", since = "1.12.0")]
impl<'a, T: Ord> Drop for PeekMut<'a, T> {
fn drop(&mut self) {
......@@ -968,6 +982,22 @@ pub struct Iter<'a, T: 'a> {
iter: slice::Iter<'a, T>,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a> fmt::Debug for Iter<'a, T> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("BinaryHeap::Iter { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a + fmt::Debug> fmt::Debug for Iter<'a, T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_tuple("BinaryHeap::Iter")
.field(&self.iter.as_slice())
.finish()
}
}
// FIXME(#19839) Remove in favor of `#[derive(Clone)]`
#[stable(feature = "rust1", since = "1.0.0")]
impl<'a, T> Clone for Iter<'a, T> {
......@@ -1016,6 +1046,22 @@ pub struct IntoIter<T> {
iter: vec::IntoIter<T>,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<T> fmt::Debug for IntoIter<T> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("BinaryHeap::IntoIter { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<T: fmt::Debug> fmt::Debug for IntoIter<T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_tuple("BinaryHeap::IntoIter")
.field(&self.iter.as_slice())
.finish()
}
}
#[stable(feature = "rust1", since = "1.0.0")]
impl<T> Iterator for IntoIter<T> {
type Item = T;
......@@ -1055,6 +1101,20 @@ pub struct Drain<'a, T: 'a> {
iter: vec::Drain<'a, T>,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a> fmt::Debug for Drain<'a, T> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("BinaryHeap::Drain { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a + fmt::Debug> fmt::Debug for Drain<'a, T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad(&format!("BinaryHeap::Drain({:?})", self.iter))
}
}
#[stable(feature = "drain", since = "1.6.0")]
impl<'a, T: 'a> Iterator for Drain<'a, T> {
type Item = T;
......
......@@ -270,6 +270,20 @@ pub struct Iter<'a, K: 'a, V: 'a> {
length: usize,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, K: 'a, V: 'a> fmt::Debug for Iter<'a, K, V> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("BTreeMap::Iter { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, K: 'a + fmt::Debug, V: 'a + fmt::Debug> fmt::Debug for Iter<'a, K, V> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_list().entries(self.clone()).finish()
}
}
/// A mutable iterator over a BTreeMap's entries.
#[stable(feature = "rust1", since = "1.0.0")]
pub struct IterMut<'a, K: 'a, V: 'a> {
......@@ -277,6 +291,20 @@ pub struct IterMut<'a, K: 'a, V: 'a> {
length: usize,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, K: 'a, V: 'a> fmt::Debug for IterMut<'a, K, V> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("BTreeMap::IterMut { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, K: 'a + fmt::Debug, V: 'a + fmt::Debug> fmt::Debug for IterMut<'a, K, V> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad(&format!("BTreeMap::IterMut({:?})", self.range))
}
}
/// An owning iterator over a BTreeMap's entries.
#[stable(feature = "rust1", since = "1.0.0")]
pub struct IntoIter<K, V> {
......@@ -285,30 +313,104 @@ pub struct IntoIter<K, V> {
length: usize,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<K, V> fmt::Debug for IntoIter<K, V> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("BTreeMap::IntoIter { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<K: fmt::Debug, V: fmt::Debug> fmt::Debug for IntoIter<K, V> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let range = Range {
front: self.front.reborrow(),
back: self.back.reborrow(),
};
f.debug_list().entries(range).finish()
}
}
/// An iterator over a BTreeMap's keys.
#[stable(feature = "rust1", since = "1.0.0")]
pub struct Keys<'a, K: 'a, V: 'a> {
inner: Iter<'a, K, V>,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, K: 'a, V: 'a> fmt::Debug for Keys<'a, K, V> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("BTreeMap::Keys { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, K: 'a + fmt::Debug, V: 'a + fmt::Debug> fmt::Debug for Keys<'a, K, V> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_list().entries(self.inner.clone()).finish()
}
}
/// An iterator over a BTreeMap's values.
#[stable(feature = "rust1", since = "1.0.0")]
pub struct Values<'a, K: 'a, V: 'a> {
inner: Iter<'a, K, V>,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, K: 'a, V: 'a> fmt::Debug for Values<'a, K, V> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("BTreeMap::Values { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, K: 'a + fmt::Debug, V: 'a + fmt::Debug> fmt::Debug for Values<'a, K, V> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_list().entries(self.inner.clone()).finish()
}
}
/// A mutable iterator over a BTreeMap's values.
#[stable(feature = "map_values_mut", since = "1.10.0")]
pub struct ValuesMut<'a, K: 'a, V: 'a> {
inner: IterMut<'a, K, V>,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, K: 'a, V: 'a> fmt::Debug for ValuesMut<'a, K, V> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("BTreeMap::ValuesMut { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, K: 'a + fmt::Debug, V: 'a + fmt::Debug> fmt::Debug for ValuesMut<'a, K, V> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad(&format!("BTreeMap::ValuesMut({:?})", self.inner))
}
}
/// An iterator over a sub-range of BTreeMap's entries.
pub struct Range<'a, K: 'a, V: 'a> {
front: Handle<NodeRef<marker::Immut<'a>, K, V, marker::Leaf>, marker::Edge>,
back: Handle<NodeRef<marker::Immut<'a>, K, V, marker::Leaf>, marker::Edge>,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, K: 'a, V: 'a> fmt::Debug for Range<'a, K, V> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("BTreeMap::Range { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, K: 'a + fmt::Debug, V: 'a + fmt::Debug> fmt::Debug for Range<'a, K, V> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_list().entries(self.clone()).finish()
}
}
/// A mutable iterator over a sub-range of BTreeMap's entries.
pub struct RangeMut<'a, K: 'a, V: 'a> {
front: Handle<NodeRef<marker::Mut<'a>, K, V, marker::Leaf>, marker::Edge>,
......@@ -318,6 +420,24 @@ pub struct RangeMut<'a, K: 'a, V: 'a> {
_marker: PhantomData<&'a mut (K, V)>,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, K: 'a, V: 'a> fmt::Debug for RangeMut<'a, K, V> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("BTreeMap::RangeMut { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, K: 'a + fmt::Debug, V: 'a + fmt::Debug> fmt::Debug for RangeMut<'a, K, V> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let range = Range {
front: self.front.reborrow(),
back: self.back.reborrow(),
};
f.debug_list().entries(range).finish()
}
}
/// A view into a single entry in a map, which may either be vacant or occupied.
/// This enum is constructed from the [`entry`] method on [`BTreeMap`].
///
......
......@@ -85,6 +85,22 @@ pub struct Iter<'a, T: 'a> {
iter: Keys<'a, T, ()>,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a> fmt::Debug for Iter<'a, T> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("BTreeSet::Iter { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a + fmt::Debug> fmt::Debug for Iter<'a, T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_tuple("BTreeSet::Iter")
.field(&self.iter.clone())
.finish()
}
}
/// An owning iterator over a `BTreeSet`'s items.
///
/// This structure is created by the `into_iter` method on [`BTreeSet`]
......@@ -96,6 +112,20 @@ pub struct IntoIter<T> {
iter: ::btree_map::IntoIter<T, ()>,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<T> fmt::Debug for IntoIter<T> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("BTreeSet::IntoIter { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<T: fmt::Debug> fmt::Debug for IntoIter<T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad(&format!("BTreeSet::IntoIter({:?})", self.iter))
}
}
/// An iterator over a sub-range of `BTreeSet`'s items.
///
/// This structure is created by the [`range`] method on [`BTreeSet`].
......@@ -106,6 +136,20 @@ pub struct Range<'a, T: 'a> {
iter: ::btree_map::Range<'a, T, ()>,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a> fmt::Debug for Range<'a, T> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("BTreeSet::Range { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a + fmt::Debug> fmt::Debug for Range<'a, T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad(&format!("BTreeSet::Range({:?})", self.iter))
}
}
/// A lazy iterator producing elements in the set difference (in-order).
///
/// This structure is created by the [`difference`] method on [`BTreeSet`].
......@@ -118,6 +162,22 @@ pub struct Difference<'a, T: 'a> {
b: Peekable<Iter<'a, T>>,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a> fmt::Debug for Difference<'a, T> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("BTreeSet::Difference { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a + fmt::Debug> fmt::Debug for Difference<'a, T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_tuple("BTreeSet::Difference")
.field(&self.clone())
.finish()
}
}
/// A lazy iterator producing elements in the set symmetric difference (in-order).
///
/// This structure is created by the [`symmetric_difference`] method on
......@@ -131,6 +191,22 @@ pub struct SymmetricDifference<'a, T: 'a> {
b: Peekable<Iter<'a, T>>,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a> fmt::Debug for SymmetricDifference<'a, T> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("BTreeSet::SymmetricDifference { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a + fmt::Debug> fmt::Debug for SymmetricDifference<'a, T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_tuple("BTreeSet::SymmetricDifference")
.field(&self.clone())
.finish()
}
}
/// A lazy iterator producing elements in the set intersection (in-order).
///
/// This structure is created by the [`intersection`] method on [`BTreeSet`].
......@@ -143,6 +219,22 @@ pub struct Intersection<'a, T: 'a> {
b: Peekable<Iter<'a, T>>,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a> fmt::Debug for Intersection<'a, T> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("BTreeSet::Intersection { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a + fmt::Debug> fmt::Debug for Intersection<'a, T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_tuple("BTreeSet::Intersection")
.field(&self.clone())
.finish()
}
}
/// A lazy iterator producing elements in the set union (in-order).
///
/// This structure is created by the [`union`] method on [`BTreeSet`].
......@@ -155,6 +247,22 @@ pub struct Union<'a, T: 'a> {
b: Peekable<Iter<'a, T>>,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a> fmt::Debug for Union<'a, T> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("BTreeSet::Union { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a + fmt::Debug> fmt::Debug for Union<'a, T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_tuple("BTreeSet::Union")
.field(&self.clone())
.finish()
}
}
impl<T: Ord> BTreeSet<T> {
/// Makes a new `BTreeSet` with a reasonable choice of B.
///
......
......@@ -220,6 +220,22 @@ pub struct Iter<E> {
marker: marker::PhantomData<E>,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<E> fmt::Debug for Iter<E> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("EnumSet::Iter { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<E: fmt::Debug> fmt::Debug for Iter<E> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_tuple("EnumSet::Iter")
.field(&self.clone())
.finish()
}
}
// FIXME(#19839) Remove in favor of `#[derive(Clone)]`
impl<E> Clone for Iter<E> {
fn clone(&self) -> Iter<E> {
......
......@@ -28,6 +28,7 @@
#![cfg_attr(test, allow(deprecated))] // rand
#![deny(warnings)]
#![deny(missing_debug_implementations)]
#![feature(alloc)]
#![feature(allow_internal_unstable)]
......
......@@ -65,6 +65,22 @@ pub struct Iter<'a, T: 'a> {
marker: PhantomData<&'a Node<T>>,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a> fmt::Debug for Iter<'a, T> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("LinkedList::Iter { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a + fmt::Debug> fmt::Debug for Iter<'a, T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_tuple("LinkedList::Iter")
.field(&self.clone())
.finish()
}
}
// FIXME #19839: deriving is too aggressive on the bounds (T doesn't need to be Clone).
#[stable(feature = "rust1", since = "1.0.0")]
impl<'a, T> Clone for Iter<'a, T> {
......@@ -82,6 +98,22 @@ pub struct IterMut<'a, T: 'a> {
len: usize,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a> fmt::Debug for IterMut<'a, T> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("LinkedList::IterMut { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a + fmt::Debug> fmt::Debug for IterMut<'a, T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_tuple("LinkedList::IterMut")
.field(self.clone())
.finish()
}
}
/// An iterator over the elements of a `LinkedList`.
#[derive(Clone)]
#[stable(feature = "rust1", since = "1.0.0")]
......@@ -89,6 +121,22 @@ pub struct IntoIter<T> {
list: LinkedList<T>,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<T> fmt::Debug for IntoIter<T> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("LinkedList::IntoIter { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<T: fmt::Debug> fmt::Debug for IntoIter<T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_tuple("LinkedList::IntoIter")
.field(self.clone())
.finish()
}
}
impl<T> Node<T> {
fn new(element: T) -> Self {
Node {
......@@ -1077,6 +1125,22 @@ pub struct FrontPlace<'a, T: 'a> {
node: IntermediateBox<Node<T>>,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a> fmt::Debug for FrontPlace<'a, T> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("LinkedList::FrontPlace { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a + fmt::Debug> fmt::Debug for FrontPlace<'a, T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_tuple("LinkedList::FrontPlace")
.field(self.clone())
.finish()
}
}
#[unstable(feature = "collection_placement",
reason = "placement protocol is subject to change",
issue = "30172")]
......@@ -1121,6 +1185,22 @@ pub struct BackPlace<'a, T: 'a> {
node: IntermediateBox<Node<T>>,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a> fmt::Debug for BackPlace<'a, T> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("LinkedList::BackPlace { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a + fmt::Debug> fmt::Debug for BackPlace<'a, T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_tuple("LinkedList::BackPlace")
.field(self.clone())
.finish()
}
}
#[unstable(feature = "collection_placement",
reason = "placement protocol is subject to change",
issue = "30172")]
......
......@@ -19,6 +19,7 @@
// It's cleaner to just turn off the unused_imports warning than to fix them.
#![allow(unused_imports)]
use core::fmt;
use core::str as core_str;
use core::str::pattern::Pattern;
use core::str::pattern::{Searcher, ReverseSearcher, DoubleEndedSearcher};
......@@ -122,6 +123,13 @@ pub struct EncodeUtf16<'a> {
encoder: Utf16Encoder<Chars<'a>>,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a> fmt::Debug for EncodeUtf16<'a> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("EncodeUtf16 { .. }")
}
}
#[stable(feature = "encode_utf16", since = "1.8.0")]
impl<'a> Iterator for EncodeUtf16<'a> {
type Item = u16;
......
......@@ -1979,6 +1979,13 @@ pub struct Drain<'a> {
iter: Chars<'a>,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a> fmt::Debug for Drain<'a> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("String::Drain { .. }")
}
}
#[stable(feature = "drain", since = "1.6.0")]
unsafe impl<'a> Sync for Drain<'a> {}
#[stable(feature = "drain", since = "1.6.0")]
......
......@@ -2092,6 +2092,22 @@ pub struct Drain<'a, T: 'a> {
vec: Shared<Vec<T>>,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a> fmt::Debug for Drain<'a, T> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("Vec::Drain { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a + fmt::Debug> fmt::Debug for Drain<'a, T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_tuple("Vec::Drain")
.field(&self.iter.as_slice())
.finish()
}
}
#[stable(feature = "drain", since = "1.6.0")]
unsafe impl<'a, T: Sync> Sync for Drain<'a, T> {}
#[stable(feature = "drain", since = "1.6.0")]
......@@ -2162,6 +2178,22 @@ pub struct PlaceBack<'a, T: 'a> {
vec: &'a mut Vec<T>,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a> fmt::Debug for PlaceBack<'a, T> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("Vec::PlaceBack { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a + fmt::Debug> fmt::Debug for PlaceBack<'a, T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_tuple("Vec::PlaceBack")
.field(&self.vec.as_slice())
.finish()
}
}
#[unstable(feature = "collection_placement",
reason = "placement protocol is subject to change",
issue = "30172")]
......
......@@ -1866,6 +1866,22 @@ pub struct Iter<'a, T: 'a> {
head: usize,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a> fmt::Debug for Iter<'a, T> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("VecDeque::Iter { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a + fmt::Debug> fmt::Debug for Iter<'a, T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_tuple("VecDeque::Iter")
.field(&self.clone())
.finish()
}
}
// FIXME(#19839) Remove in favor of `#[derive(Clone)]`
#[stable(feature = "rust1", since = "1.0.0")]
impl<'a, T> Clone for Iter<'a, T> {
......@@ -1938,6 +1954,22 @@ pub struct IterMut<'a, T: 'a> {
head: usize,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a> fmt::Debug for IterMut<'a, T> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("VecDeque::IterMut { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a + fmt::Debug> fmt::Debug for IterMut<'a, T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_tuple("VecDeque::IterMut")
.field(&self.clone())
.finish()
}
}
#[stable(feature = "rust1", since = "1.0.0")]
impl<'a, T> Iterator for IterMut<'a, T> {
type Item = &'a mut T;
......@@ -2004,6 +2036,22 @@ pub struct IntoIter<T> {
inner: VecDeque<T>,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<T> fmt::Debug for IntoIter<T> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("VecDeque::IntoIter { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<T: fmt::Debug> fmt::Debug for IntoIter<T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_tuple("VecDeque::IntoIter")
.field(&self.clone())
.finish()
}
}
#[stable(feature = "rust1", since = "1.0.0")]
impl<T> Iterator for IntoIter<T> {
type Item = T;
......@@ -2047,6 +2095,22 @@ pub struct Drain<'a, T: 'a> {
deque: Shared<VecDeque<T>>,
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a> fmt::Debug for Drain<'a, T> {
default fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.pad("VecDeque::Drain { .. }")
}
}
#[stable(feature = "collection_debug", since = "1.15.0")]
impl<'a, T: 'a + fmt::Debug> fmt::Debug for Drain<'a, T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_tuple("VecDeque::Drain")
.field(&self.clone())
.finish()
}
}
#[stable(feature = "drain", since = "1.6.0")]
unsafe impl<'a, T: Sync> Sync for Drain<'a, T> {}
#[stable(feature = "drain", since = "1.6.0")]
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册