15 from __future__
import print_function
18 VERSION =
'cnat32array --- 2010 March 16'
32 """Tableau compact de naturels stockés sur n bits.
33 Les éléments sont stockés de façon contiguë en mémoire.
34 Par ex.: les éléments d'un tableau de 5 éléments sur 7 bits
35 occupe 35 bits arrondi à 2*32 == 64 bits
37 Pre: n: 1 <= naturel <= 32"""
41 """Renvoie un tableau compact de naturels stockés sur size bits.
42 Si items == None alors renvoie un tableau vide
44 Pre: size: 1 <= naturel <= 32
49 assert 1 <= size <= 32, size
58 self.
a = array.array(
'L')
60 raise NotImplementedError
65 """Renvoie l'élément d'indice key
66 ou un tuple contenant les éléments de la tranche key.
67 Lève une exception IndexError si le ou les indices n'existent pas
69 Pre: key: entier ou tranche
71 Result: naturel < 2**32 ou tuple de naturels < 2**32
76 if type(key) != types.SliceType:
78 return int(self.tables[key])
88 if self.
size + shift <= 32:
89 return int((self.
a[key] >> shift) & nat32.MERSENNE32_TUPLE[self.
size])
91 return int(((long(self.
a[key+1]) << (32 - shift))
92 | (self.
a[key] >> shift))
93 & nat32.MERSENNE32_TUPLE[self.
size])
95 return (tuple(self[i]
for i
in range(key.start, key.stop))
if key.step ==
None
96 else tuple(self[i]
for i
in range(key.start, key.stop, key.step)))
101 """Renvoie le nombre d'éléments du tableau
111 """Si le tableau est vide alors renvoie 'Cnat32array()'
112 sinon renvoie 'Cnat32array(size, [éléments])'
114 Result: string quotée
117 return (
'Cnat32array()' if self.
len == 0
118 else 'Cnat32array({0}, {1!r})'.format(self.
size, [n
for n
in self.
a]))
123 """Modifie le ou les éléments d'indice key par value.
124 Lève une exception IndexError si le ou les indices n'existent pas
126 Pre: key: entier ou tranche
134 raise NotImplementedError
141 if __name__ ==
'__main__':
148 debug.test_begin(VERSION, __debug__)
150 print(
'Cnat32array()...', end=
''); sys.stdout.flush()
151 for k
in range(1, 33):
153 assert t.len == 0 ==
len(t) == 0, (t.len,
len(t))
154 assert t.size == k, t.size
155 assert type(t.a) == array.array, type(t.a)
156 assert len(t.a) == 0,
len(t.a)
157 assert repr(t) ==
'Cnat32array()'
158 print(
'ok'); sys.stdout.flush()
160 print(
'Cnat32array.__getitem__()...', end=
''); sys.stdout.flush()
162 print(
'ok'); sys.stdout.flush()
165 print(
'Cnat32array.__len__()...', end=
''); sys.stdout.flush()
167 print(
'ok'); sys.stdout.flush()
170 print(
'Cnat32array.__repr__()...', end=
''); sys.stdout.flush()
172 print(
'ok'); sys.stdout.flush()
175 print(
'Cnat32array.__setitem__()...', end=
''); sys.stdout.flush()
177 print(
'ok'); sys.stdout.flush()