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