Added memoization of hostmaskPatternEqual.

This commit is contained in:
Jeremy Fincher 2003-12-16 20:36:43 +00:00
parent 44728222eb
commit a63d175498
2 changed files with 14 additions and 3 deletions

View File

@ -125,10 +125,10 @@ def isChannel(s):
_match = fnmatch.fnmatchcase _match = fnmatch.fnmatchcase
_patternCache = {} _patternCache = {}
def hostmaskPatternEqual(pattern, hostmask): def _hostmaskPatternEqual(pattern, hostmask):
"""Returns True if hostmask matches the hostmask pattern pattern.""" """Returns True if hostmask matches the hostmask pattern pattern."""
try: try:
return bool(_patternCache[pattern](hostmask)) return _patternCache[pattern](hostmask) is not None
except KeyError: except KeyError:
fd = sio() fd = sio()
for c in pattern: for c in pattern:
@ -149,7 +149,16 @@ def hostmaskPatternEqual(pattern, hostmask):
fd.write('$') fd.write('$')
f = re.compile(fd.getvalue(), re.I).match f = re.compile(fd.getvalue(), re.I).match
_patternCache[pattern] = f _patternCache[pattern] = f
return bool(f(hostmask)) return f(hostmask) is not None
_hostmaskPatternEqualCache = {}
def hostmaskPatternEqual(pattern, hostmask):
try:
return _hostmaskPatternEqualCache[(pattern, hostmask)]
except KeyError:
b = _hostmaskPatternEqual(pattern, hostmask)
_hostmaskPatternEqualCache[(pattern, hostmask)] = b
return b
_ipchars = string.digits + '.' _ipchars = string.digits + '.'
def isIP(s): def isIP(s):

View File

@ -87,6 +87,8 @@ def upkeep(): # Function to be run on occasion to do upkeep stuff.
if not dying: if not dying:
log.debug('Regexp cache size: %s', len(sre._cache)) log.debug('Regexp cache size: %s', len(sre._cache))
log.debug('Pattern cache size: %s'%len(ircutils._patternCache)) log.debug('Pattern cache size: %s'%len(ircutils._patternCache))
log.debug('HostmaskPatternEqual cache size: %s' %
len(ircutils._hostmaskPatternEqualCache))
log.info('%s upkeep ran.', time.strftime(conf.logTimestampFormat)) log.info('%s upkeep ran.', time.strftime(conf.logTimestampFormat))
return collected return collected