From 410154779451b21ea14d7f6272c320059a772949 Mon Sep 17 00:00:00 2001 From: "Jeffrey C. Ollie" Date: Tue, 12 Aug 2008 22:00:45 -0500 Subject: Import files from BitTorrent 4.4.0 http://download.bittorrent.com/dl/BitTorrent-4.4.0.tar.gz --- khashmir/cache.py | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 khashmir/cache.py (limited to 'khashmir/cache.py') diff --git a/khashmir/cache.py b/khashmir/cache.py new file mode 100644 index 0000000..ab4df30 --- /dev/null +++ b/khashmir/cache.py @@ -0,0 +1,52 @@ +# The contents of this file are subject to the BitTorrent Open Source License +# Version 1.1 (the License). You may not copy or use this file, in either +# source code or executable form, except in compliance with the License. You +# may obtain a copy of the License at http://www.bittorrent.com/license/. +# +# Software distributed under the License is distributed on an AS IS basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. + +from BitTorrent.platform import bttime as time + +class Cache: + def __init__(self, touch_on_access = False): + self.data = {} + self.q = [] + self.touch = touch_on_access + + def __getitem__(self, key): + if self.touch: + v = self.data[key][1] + self[key] = v + return self.data[key][1] + + def __setitem__(self, key, value): + t = time() + self.data[key] = (t, value) + self.q.insert(0, (t, key, value)) + + def __delitem__(self, key): + del(self.data[key]) + + def has_key(self, key): + return self.data.has_key(key) + + def keys(self): + return self.data.keys() + + def expire(self, expire_time): + try: + while self.q[-1][0] < expire_time: + x = self.q.pop() + assert(x[0] < expire_time) + try: + t, v = self.data[x[1]] + if v == x[2] and t == x[0]: + del(self.data[x[1]]) + except KeyError: + pass + except IndexError: + pass + -- cgit