class Gossip:
    """A Queue and a Map"""
    by_key = {}
    ring = None
    def find(self, key):
        if key in self.by_key:
            return self.by_key[key]
        else:
            e = Entry(key,None,None)
            self.add(e)
            return e

    def add(self, adv):
        print("add", adv)
        if adv.key in self.by_key:
            x = self.by_key[adv.key]            
            if adv.ttl > x.ttl:
                x.ttl = adv.ttl
                x.value = adv.value
        else:
            if self.ring == None:
                adv.prev = adv
                adv.nxt = adv
                self.ring = adv
            else:
                adv.prev=self.ring.prev
                adv.nxt=self.ring
                self.ring.prev.nxt = adv
                self.ring.prev = adv
            self.by_key[adv.key] = adv

    def select(self):
        if self.ring == None:
            return None
        else:
            if self.ring.ttl < 1:
                if self.ring is self.ring.prev:
                    self.ring.prev = None
                    self.ring.nxt = None
                    self.ring = None
                    del self.by_key[self.ring.key]
                    return None
                else:
                    self.ring.prev.nxt = self.ring.nxt
                    self.ring.nxt.prev = self.ring.prev
                    del self.by_key[self.ring.key]
                    self.ring = self.ring.nxt
                    return self.select()
            else:
                self.ring.ttl = self.ring.ttl - 1
                x = self.ring
                self.ring = self.ring.nxt
                return x

Generated At 2023-03-16T13:58:25-0700 original