@@ -145,7 +145,7 @@ def _new_ptypy_object(self, obj):
145145
146146 if self ._pool .get (prefix ) is None :
147147 self ._pool [prefix ] = OrderedDict ()
148- self ._recs [prefix ] = dict ( )
148+ self ._recs [prefix ] = np . zeros (( 8 ,), dtype = obj . __class__ . _fields )
149149
150150 d = self ._pool [prefix ]
151151 # Check if ID is already taken and assign a new one
@@ -174,14 +174,17 @@ def _new_ptypy_object(self, obj):
174174
175175 d [nID ] = obj
176176 obj .ID = nID
177- idx = len (d ) - 1
177+ idx = len (d )
178178 obj .numID = idx
179- # l = len(self._recs[prefix])
180- # if idx >= l:
181- # nl = l + 8192 if idx > 10000 else 2*l
182- # #self._recs[prefix].resize((nl,), refcheck=False)
183- # #self._recs[prefix] = np.pad(recs, (0,nl-l))
184- self ._recs [prefix ][idx ] = np .zeros ((1 ,),dtype = obj .__class__ ._fields )[0 ]
179+ l = len (self ._recs [prefix ])
180+ if idx >= l :
181+ nl = l + 8192 if idx > 10000 else 2 * l
182+ self ._recs [prefix ].resize ((nl ,), refcheck = False )
183+ # after .resize() all previous references to the records
184+ # array are not guaranteed to point to correct memory
185+ # therefore need to update all previous pointers
186+ for v in self ._pool [prefix ].values ():
187+ v ._record = self ._recs [prefix ][v .numID ]
185188 obj ._record = self ._recs [prefix ][idx ]
186189 self ._recs [prefix ][idx ]['ID' ] = nID
187190
@@ -1286,10 +1289,9 @@ def __str__(self):
12861289 else :
12871290 return first + '\n ACTIVE : slice = %s' % str (self .slice )
12881291
1289- def copy (self ,ID = None , update = True , rec_copy = True ):
1292+ def copy (self ,ID = None , update = True ):
12901293 nView = View (self .owner , ID )
1291- if rec_copy :
1292- nView ._record = self ._record .copy ()
1294+ nView ._record [...][()] = self ._record .copy ()[...]
12931295 nView ._ndim = self ._ndim
12941296 nView .storage = self .storage
12951297 nView .storageID = self .storageID
0 commit comments