Skip to content

Commit 1ad72ee

Browse files
committed
Merge pull request #24 from apasel422/tidy
Tidy
2 parents 592272b + 1f7cea5 commit 1ad72ee

File tree

2 files changed

+44
-21
lines changed

2 files changed

+44
-21
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22

33
name = "linked-hash-map"
4-
version = "0.0.4"
4+
version = "0.0.5"
55
license = "MIT/Apache-2.0"
66
description = "A HashMap wrapper that holds key-value pairs in insertion order"
77
authors = [

src/lib.rs

Lines changed: 43 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,21 +25,19 @@
2525
//! assert_eq!(map[&3], 30);
2626
//!
2727
//! let items: Vec<(i32, i32)> = map.iter().map(|t| (*t.0, *t.1)).collect();
28-
//! assert_eq!(vec![(2, 20), (1, 10), (3, 30)], items);
28+
//! assert_eq!(items, [(2, 20), (1, 10), (3, 30)]);
2929
//! ```
3030
3131
#![feature(hashmap_hasher)]
3232
#![feature(box_raw)]
3333
#![feature(iter_order)]
3434

3535
use std::borrow::Borrow;
36-
use std::cmp::{PartialEq, Eq, Ordering};
36+
use std::cmp::Ordering;
3737
use std::collections::hash_map::{self, HashMap};
3838
use std::collections::hash_state::HashState;
39-
use std::default::Default;
4039
use std::fmt;
4140
use std::hash::{Hash, Hasher};
42-
use std::iter::IntoIterator;
4341
use std::iter;
4442
use std::marker;
4543
use std::mem;
@@ -260,12 +258,9 @@ impl<K: Hash + Eq, V, S: HashState> LinkedHashMap<K, V, S> {
260258
(Some(unsafe { &mut(*node_ptr).value }), Some(node_ptr))
261259
}
262260
};
263-
match node_ptr_opt {
264-
None => (),
265-
Some(node_ptr) => {
266-
self.detach(node_ptr);
267-
self.attach(node_ptr);
268-
}
261+
if let Some(node_ptr) = node_ptr_opt {
262+
self.detach(node_ptr);
263+
self.attach(node_ptr);
269264
}
270265
return value;
271266
}
@@ -416,7 +411,7 @@ impl<K: Hash + Eq, V, S: HashState> LinkedHashMap<K, V, S> {
416411
}
417412
}
418413

419-
/// A double-ended iterator visiting all key-value pairs in order of insertion.
414+
/// Returns a double-ended iterator visiting all key-value pairs in order of insertion.
420415
/// Iterator element type is `(&'a K, &'a V)`
421416
///
422417
/// # Examples
@@ -443,7 +438,7 @@ impl<K: Hash + Eq, V, S: HashState> LinkedHashMap<K, V, S> {
443438
}
444439
}
445440

446-
/// A double-ended iterator visiting all key-value pairs in order of insertion.
441+
/// Returns a double-ended iterator visiting all key-value pairs in order of insertion.
447442
/// Iterator element type is `(&'a K, &'a mut V)`
448443
/// # Examples
449444
/// ```
@@ -468,11 +463,11 @@ impl<K: Hash + Eq, V, S: HashState> LinkedHashMap<K, V, S> {
468463
head: unsafe { (*self.head).prev },
469464
tail: self.head,
470465
remaining: self.len(),
471-
marker: marker::PhantomData
466+
marker: marker::PhantomData,
472467
}
473468
}
474469

475-
/// A double-ended iterator visiting all key in order of insertion.
470+
/// Returns a double-ended iterator visiting all key in order of insertion.
476471
///
477472
/// # Examples
478473
/// ```
@@ -496,7 +491,7 @@ impl<K: Hash + Eq, V, S: HashState> LinkedHashMap<K, V, S> {
496491
Keys { inner: self.iter().map(first) }
497492
}
498493

499-
/// A double-ended iterator visiting all values in order of insertion.
494+
/// Returns a double-ended iterator visiting all values in order of insertion.
500495
///
501496
/// # Examples
502497
/// ```
@@ -605,7 +600,11 @@ impl<A: fmt::Debug + Hash + Eq, B: fmt::Debug, S: HashState> fmt::Debug for Link
605600

606601
impl<K: Hash + Eq, V: PartialEq, S: HashState> PartialEq for LinkedHashMap<K, V, S> {
607602
fn eq(&self, other: &LinkedHashMap<K, V, S>) -> bool {
608-
self.len() == other.len() && self.iter().zip(other.iter()).all(|(l, r)| l == r)
603+
self.len() == other.len() && iter::order::eq(self.iter(), other.iter())
604+
}
605+
606+
fn ne(&self, other: &LinkedHashMap<K, V, S>) -> bool {
607+
self.len() != other.len() || iter::order::ne(self.iter(), other.iter())
609608
}
610609
}
611610

@@ -615,6 +614,22 @@ impl<K: Hash + Eq + PartialOrd, V: PartialOrd, S: HashState> PartialOrd for Link
615614
fn partial_cmp(&self, other: &LinkedHashMap<K, V, S>) -> Option<Ordering> {
616615
iter::order::partial_cmp(self.iter(), other.iter())
617616
}
617+
618+
fn lt(&self, other: &LinkedHashMap<K, V, S>) -> bool {
619+
iter::order::lt(self.iter(), other.iter())
620+
}
621+
622+
fn le(&self, other: &LinkedHashMap<K, V, S>) -> bool {
623+
iter::order::le(self.iter(), other.iter())
624+
}
625+
626+
fn ge(&self, other: &LinkedHashMap<K, V, S>) -> bool {
627+
iter::order::ge(self.iter(), other.iter())
628+
}
629+
630+
fn gt(&self, other: &LinkedHashMap<K, V, S>) -> bool {
631+
iter::order::gt(self.iter(), other.iter())
632+
}
618633
}
619634

620635
impl<K: Hash + Eq + Ord, V: Ord, S: HashState> Ord for LinkedHashMap<K, V, S> {
@@ -732,9 +747,13 @@ impl<'a, K, V> DoubleEndedIterator for IterMut<'a, K, V> {
732747
}
733748
}
734749

735-
impl<'a, K, V> ExactSizeIterator for Iter<'a, K, V> {}
750+
impl<'a, K, V> ExactSizeIterator for Iter<'a, K, V> {
751+
fn len(&self) -> usize { self.remaining }
752+
}
736753

737-
impl<'a, K, V> ExactSizeIterator for IterMut<'a, K, V> {}
754+
impl<'a, K, V> ExactSizeIterator for IterMut<'a, K, V> {
755+
fn len(&self) -> usize { self.remaining }
756+
}
738757

739758

740759
pub struct Keys<'a, K: 'a, V: 'a> {
@@ -756,7 +775,9 @@ impl<'a, K, V> DoubleEndedIterator for Keys<'a, K, V> {
756775
#[inline] fn next_back(&mut self) -> Option<(&'a K)> { self.inner.next_back() }
757776
}
758777

759-
impl<'a, K, V> ExactSizeIterator for Keys<'a, K, V> {}
778+
impl<'a, K, V> ExactSizeIterator for Keys<'a, K, V> {
779+
fn len(&self) -> usize { self.inner.len() }
780+
}
760781

761782

762783
pub struct Values<'a, K: 'a, V: 'a> {
@@ -778,7 +799,9 @@ impl<'a, K, V> DoubleEndedIterator for Values<'a, K, V> {
778799
#[inline] fn next_back(&mut self) -> Option<(&'a V)> { self.inner.next_back() }
779800
}
780801

781-
impl<'a, K, V> ExactSizeIterator for Values<'a, K, V> {}
802+
impl<'a, K, V> ExactSizeIterator for Values<'a, K, V> {
803+
fn len(&self) -> usize { self.inner.len() }
804+
}
782805

783806
impl<'a, K: Hash + Eq, V, S: HashState> IntoIterator for &'a LinkedHashMap<K, V, S> {
784807
type Item = (&'a K, &'a V);

0 commit comments

Comments
 (0)