From f392696d98cc310c7f142166d90e3c40a80c0427 Mon Sep 17 00:00:00 2001 From: Jeremy Fincher Date: Thu, 16 Oct 2003 19:36:33 +0000 Subject: [PATCH] Added TwoWayDictionary. --- src/structures.py | 25 +++++++++++++++++++------ test/test_structures.py | 23 +++++++++++++++++++++++ 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/structures.py b/src/structures.py index ae2aa4213..dd0e622a9 100644 --- a/src/structures.py +++ b/src/structures.py @@ -39,8 +39,6 @@ import fix import types -__all__ = ['RingBuffer', 'queue', 'smallqueue', 'MaxLengthQueue'] - class RingBuffer(object): """Class to represent a fixed-size ring buffer.""" __slots__ = ('L', 'i', 'full', 'maxSize') @@ -319,7 +317,22 @@ class MaxLengthQueue(queue): if len(self) > self.length: self.dequeue() -## class MaxLengthQueue(RingBuffer): -## enqueue = RingBuffer.append -## def peek(self): -## return self[0] + +class TwoWayDictionary(dict): + __slots__ = () + def __init__(self, seq=(), **kwargs): + for (key, value) in seq: + self[key] = value + self[value] = key + for (key, value) in kwargs.iteritems(): + self[key] = value + self[value] = key + + def __setitem__(self, key, value): + dict.__setitem__(self, key, value) + dict.__setitem__(self, value, key) + + def __delitem__(self, key): + value = self[key] + dict.__delitem__(self, key) + dict.__delitem__(self, value) diff --git a/test/test_structures.py b/test/test_structures.py index fa3a94201..497867f59 100644 --- a/test/test_structures.py +++ b/test/test_structures.py @@ -549,5 +549,28 @@ class MaxLengthQueueTestCase(unittest.TestCase): self.assertEqual(q[0], 3) +class TwoWayDictionaryTestCase(unittest.TestCase): + def testInit(self): + d = TwoWayDictionary(foo='bar') + self.failUnless('foo' in d) + self.failUnless('bar' in d) + + def testSetitem(self): + d = TwoWayDictionary() + d['foo'] = 'bar' + self.failUnless('foo' in d) + self.failUnless('bar' in d) + + def testDelitem(self): + d = TwoWayDictionary(foo='bar') + del d['foo'] + self.failIf('foo' in d) + self.failIf('bar' in d) + d = TwoWayDictionary(foo='bar') + del d['bar'] + self.failIf('bar' in d) + self.failIf('foo' in d) + + # vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78: