Advertisement
Guest User

Untitled

a guest
Feb 8th, 2016
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.54 KB | None | 0 0
  1.     pub fn touch(&mut self, key: &K, expires: Option<Timestamp>, now: Timestamp) -> bool {
  2.         // update the timestamp and last-used field of a row without copying the
  3.         // whole contents
  4.         match self._get_full_entry(key, now) {
  5.             Some(full_entry) => {
  6.                 self._touch(key,
  7.                             (*full_entry).expires, expires,
  8.                             (*full_entry).used, now);
  9.                 (*full_entry).expires = expires;
  10.                 (*full_entry).used = now;
  11.                 true
  12.             },
  13.             _ => false
  14.         }
  15.     }
  16.  
  17.     fn _touch(&mut self, key: &K,
  18.               old_expires: Option<Timestamp>, new_expires: Option<Timestamp>,
  19.               old_used: Timestamp, now: Timestamp) {
  20.  
  21.         if old_expires != new_expires {
  22.             if let Some(old_expires_ts) = old_expires {
  23.                 // if it expired before, we have to remove it
  24.                 let old_expires_key = (old_expires_ts, key.clone());
  25.                 self.expires.remove(&old_expires_key);
  26.             }
  27.  
  28.             if let Some(expires_ts) = new_expires {
  29.                 // if it expires now, we have to add it
  30.                 let expires_key = (expires_ts, key.clone());
  31.                 self.expires.insert(expires_key);
  32.             }
  33.         }
  34.  
  35.         if old_used != now {
  36.             let old_lru_key = (old_used, (*key).clone());
  37.             self.lru.remove(&old_lru_key);
  38.             let new_lru_key = (now, (*key).clone());
  39.             self.lru.insert(new_lru_key);
  40.         }
  41.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement