| 53 | |
| 54 | |
| 55 | class Node(object): |
| 56 | |
| 57 | def __init__(self, v = None, parent = None): |
| 58 | self.values, self.valcnt = None, 0 |
| 59 | self.links, self.refcnt = None, 0 |
| 60 | self.parent = parent |
| 61 | self.insertValue(v) |
| 62 | |
| 63 | def __str__(self): |
| 64 | out = [] |
| 65 | if self.values is not None: |
| 66 | for v in self.values: |
| 67 | if v is not None: |
| 68 | out.append(' %s ' % str(v)) |
| 69 | return ''.join(out) |
| 70 | else: return 'empty' |
| 71 | |
| 72 | def __iter__(self): |
| 73 | if self.values is not None: |
| 74 | for item in self.values: |
| 75 | yield item |
| 76 | |
| 77 | def __getlink(self, a): |
| 78 | for idx in xrange(self.valcnt): |
| 79 | if idx is 0: |
| 80 | if a < self.values[idx]: return idx |
| 81 | else: |
| 82 | if self.values[idx - 1] < a < self.values[idx]: return idx |
| 83 | if idx == self.valcnt - 1: return idx + 1 |
| 84 | return -1 |
| 85 | |
| 86 | def __addLink(self, link): |
| 87 | if self.links is None: self.links = [None] * 4 |
| 88 | self.links[self.refcnt] = link |
| 89 | self.refcnt += 1 |
| 90 | |
| 91 | def __insertLink(self, idx, anotherNode): |
| 92 | if self.links is None: self.links = [None] * 4 |
| 93 | if idx == 0: |
| 94 | self.links[0],self.links[1],self.links[2], self.links[3] = anotherNode,self.links[0],self.links[1], self.links[2] |
| 95 | elif idx == 1: |
| 96 | self.links[1], self.links[2], self.links[3] = anotherNode, self.links[1], self.links[2] |
| 97 | elif idx == 2: |
| 98 | self.links[2], self.links[3] = anotherNode, self.links[2] |
| 99 | else: |
| 100 | self.links[3] = anotherNode |
| 101 | self.refcnt += 1 |
| 102 | |
| 103 | def __removeLink(self, idx): |
| 104 | if idx == 0: |
| 105 | self.links[0], self.links[1], self.links[2], self.links[3] = self.links[1], self.links[2], self.links[3], None |
| 106 | elif idx == 1: |
| 107 | self.links[1], self.links[2], self.links[3] = self.links[2], self.links[3], None |
| 108 | elif idx == 2: |
| 109 | self.links[2], self.links[3] = self.links[3], None |
| 110 | else: |
| 111 | self.links[3] = None |
| 112 | self.refcnt -= 1 |
no outgoing calls
no test coverage detected