From 472e9fa9e475f4e6a63cac9786a210a760cda469 Mon Sep 17 00:00:00 2001 From: ptmcg Date: Wed, 27 Jul 2016 07:07:08 +0000 Subject: _TTLCache logic cleanup, add get() method similar to dict.get git-svn-id: svn://svn.code.sf.net/p/pyparsing/code/trunk@374 9bf210a0-9d2d-494c-87cf-cfb32e7dff7b --- src/pyparsing.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/pyparsing.py b/src/pyparsing.py index e68e3b0..c8d3f68 100644 --- a/src/pyparsing.py +++ b/src/pyparsing.py @@ -58,7 +58,7 @@ The pyparsing module handles some of the problems that are typically vexing when """ __version__ = "2.1.6" -__versionTime__ = "26 Jul 2016 23:50 UTC" +__versionTime__ = "27 Jul 2016 06:06 UTC" __author__ = "Paul McGuire " import string @@ -892,7 +892,10 @@ class _TTLCache(object): def __len__(self): return len(self.lookup) - def __getitem__(self, key, default=None): + def __getitem__(self, key): + return self.lookup.get(key) + + def get(self, key, default=None): return self.lookup.get(key, default) def __setitem__(self, key, value): @@ -900,12 +903,12 @@ class _TTLCache(object): if not self.isfull: self.isfull = len(self) >= self.maxsize + if self.isfull: + self.lookup.pop(self.key_ttl_queue.popleft(), None) + self.lookup[key] = value self.key_ttl_queue.append(key) - if self.isfull: - self.lookup.pop(self.key_ttl_queue.popleft()) - class _UnboundedTTLCache(_TTLCache): def __setitem__(self, key, value): # unbounded cache, just add new item @@ -1203,9 +1206,9 @@ class ParserElement(object): SIZE, HIT, MISS = 0, 1, 2 lookup = (self, instring, loc, callPreParse, doActions) with ParserElement.packrat_cache_lock: - if lookup in ParserElement.packrat_cache: + value = ParserElement.packrat_cache.get(lookup, None) + if value is not None: ParserElement.packrat_cache_stats[HIT] += 1 - value = ParserElement.packrat_cache[lookup] if isinstance(value, Exception): raise value return (value[0], value[1].copy()) -- cgit v1.2.1