about summary refs log tree commit diff
path: root/src/libstd/hash
diff options
context:
space:
mode:
authorErick Tryzelaar <erick.tryzelaar@gmail.com>2014-02-26 20:46:57 -0800
committerErick Tryzelaar <erick.tryzelaar@gmail.com>2014-02-27 20:41:00 -0800
commitadeb730c7796156bd5fb63d75e13cab655b10ece (patch)
treea6f6ec6dbf3da954f3e2fb634b4fb005ac5d7767 /src/libstd/hash
parent72b5e30f6cd99f27510cb48f8882f25b31ed9d8b (diff)
downloadrust-adeb730c7796156bd5fb63d75e13cab655b10ece.tar.gz
rust-adeb730c7796156bd5fb63d75e13cab655b10ece.zip
std: cut down on the memory usage of `SipHasher`
Diffstat (limited to 'src/libstd/hash')
-rw-r--r--src/libstd/hash/sip.rs12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/libstd/hash/sip.rs b/src/libstd/hash/sip.rs
index 4bc88fbaea2..d1d4d4c90f9 100644
--- a/src/libstd/hash/sip.rs
+++ b/src/libstd/hash/sip.rs
@@ -231,23 +231,23 @@ impl Default for SipState {
 /// `SipHasher` computes the SipHash algorithm from a stream of bytes.
 #[deriving(Clone)]
 pub struct SipHasher {
-    priv state: SipState,
+    priv k0: u64,
+    priv k1: u64,
 }
 
 impl SipHasher {
     /// Create a `Sip`.
     #[inline]
     pub fn new() -> SipHasher {
-        SipHasher {
-            state: SipState::new(),
-        }
+        SipHasher::new_with_keys(0, 0)
     }
 
     /// Create a `Sip` that is keyed off the provided keys.
     #[inline]
     pub fn new_with_keys(key0: u64, key1: u64) -> SipHasher {
         SipHasher {
-            state: SipState::new_with_keys(key0, key1),
+            k0: key0,
+            k1: key1,
         }
     }
 }
@@ -255,7 +255,7 @@ impl SipHasher {
 impl Hasher<SipState> for SipHasher {
     #[inline]
     fn hash<T: Hash<SipState>>(&self, value: &T) -> u64 {
-        let mut state = self.state.clone();
+        let mut state = SipState::new_with_keys(self.k0, self.k1);
         value.hash(&mut state);
         state.result()
     }