Changeset 1603
- Timestamp:
- 06/15/09 07:07:02 (1 year ago)
- Files:
-
- netsukuku/trunk/pyntk/ntk/core/map.py (modified) (8 diffs)
- netsukuku/trunk/pyntk/test/test_map.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
netsukuku/trunk/pyntk/ntk/core/map.py
r1576 r1603 4 4 # 5 5 # This source code is free software; you can redistribute it and/or 6 # modify it under the terms of the GNU General Public License as published 6 # modify it under the terms of the GNU General Public License as published 7 7 # by the Free Software Foundation; either version 2 of the License, 8 8 # or (at your option) any later version. … … 19 19 # 20 20 # Implementation of the map. See {-topodoc-} 21 # 21 # 22 22 23 23 from random import randint … … 68 68 # Number of nodes of each level, that is: 69 69 # self.node_nb[i] = number of (g)nodes inside the gnode self.me[i+1] 70 self.node_nb = [0] * self.levels 70 self.node_nb = [0] * self.levels 71 71 72 72 self.events = Event(['NODE_NEW', 'NODE_DELETED', 'ME_CHANGED']) … … 103 103 def free_nodes_list(self, lvl): 104 104 """Returns the list of free nodes of level `lvl'""" 105 return [nid for nid in xrange(self.gsize) if self.node[lvl][nid].is_free()] 105 return [nid for nid in xrange(self.gsize) 106 if self.node_get(lvl, nid).is_free()] 106 107 107 108 def is_in_level(self, nip, lvl): … … 110 111 111 112 def lvlid_to_nip(self, lvl, id): 112 """Converts a (lvl, id) pair, referring to this map, to 113 """Converts a (lvl, id) pair, referring to this map, to 113 114 its equivalent netsukuku ip""" 114 nip=self.me[:] 115 nip[lvl]=id 116 for l in reversed(xrange(lvl)): nip[l]=0 115 nip = self.me[:] 116 nip[lvl] = id 117 for l in reversed(xrange(lvl)): 118 nip[l] = 0 117 119 return nip 118 120 … … 121 123 122 124 A nip is a list [a_0, a_1, ..., a_{n-1}], where n = self.levels 123 and such that a_{n-1}*g^{n-1}+a_{n-2}*g^(n-2)+...+a_0 = ip, 125 and such that a_{n-1}*g^{n-1}+a_{n-2}*g^(n-2)+...+a_0 = ip, 124 126 where g = self.gsize""" 125 127 126 g =self.gsize128 g = self.gsize 127 129 return [(ip % g**(l+1)) / g**l for l in xrange(self.levels)] 128 130 … … 149 151 def level_reset(self, level): 150 152 """Resets the specified level, without raising any event""" 151 self.node[level] = [None]*self.gsize153 self.node[level] = [None] * self.gsize 152 154 self.node_nb[level] = 0 153 155 … … 155 157 """Silently resets the whole map""" 156 158 for l in xrange(self.levels): 157 self.level_reset(l)159 self.level_reset(l) 158 160 159 161 def me_change(self, new_me): 160 162 """Changes self.me""" 161 old_me =self.me[:]162 self.me =new_me163 old_me = self.me[:] 164 self.me = new_me 163 165 self.events.send('ME_CHANGED', (old_me, new_me)) 164 166 165 167 166 168 def map_data_pack(self): 167 return (self.me, [ [self.node[lvl][id] for id in xrange(self.gsize)] 168 for lvl in xrange(self.levels) ], 169 '''Pack the data map''' 170 return (self.me, 171 [[self.node[lvl][id] for id in xrange(self.gsize)] 172 for lvl in xrange(self.levels)], 169 173 [self.node_nb[lvl] for lvl in xrange(self.levels)]) 170 174 171 175 def map_data_merge(self, (nip, plist, nblist)): 172 lvl =self.nip_cmp(nip, self.me)176 lvl = self.nip_cmp(nip, self.me) 173 177 for l in xrange(lvl, self.levels): 174 self.node_nb[l]=nblist[l]175 for id in xrange(self.gsize):176 self.node[l][id]=plist[l][id]178 self.node_nb[l] = nblist[l] 179 for id in xrange(self.gsize): 180 self.node[l][id] = plist[l][id] 177 181 for l in xrange(0, lvl): 178 self.level_reset(l)182 self.level_reset(l) 179 183 netsukuku/trunk/pyntk/test/test_map.py
r1602 r1603 65 65 self.assertEqual(self.map.free_nodes_nb(lvl=0), self.gsize - 1) 66 66 67 def test_free_nodes_list(self): 68 '''Free nodes of specified level''' 69 self.assertEqual(self.map.free_nodes_list(lvl=0), range(self.gsize)) 70 67 71 def test_is_in_level(self): 68 72 '''Node nip belongs to our gnode of level'''
