Skip to content

Commit

Permalink
Fix recursive case of colision
Browse files Browse the repository at this point in the history
  • Loading branch information
marciovicente committed May 21, 2014
1 parent 042967c commit 309a073
Showing 1 changed file with 13 additions and 5 deletions.
18 changes: 13 additions & 5 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,12 +89,11 @@ def print_second(self):
pass
print 'Printando a segunda posicao: %s' % obj_next.__dict__

def solve_colision(self, old_obj, new_obj):
def solve_colision(self, old_obj, new_obj, rec=None):
if self.file.closed:
self.open_file()
if self.method == 'l':

# import pdb; pdb.set_trace()
obj_next = None
if old_obj.index: # if they has a next
self.point_to_value(old_obj.index)
Expand All @@ -105,13 +104,13 @@ def solve_colision(self, old_obj, new_obj):
pass

# call solve colision recursive to the obj_next
if self.solve_colision(old_obj=obj_next, new_obj=new_obj):
if self.solve_colision(old_obj=obj_next, new_obj=new_obj, rec=True):
return False
else:
r_flag_index = self.get_flag_index()
old_obj.index = r_flag_index
# pointer to old object value
self.point_to_value(old_obj.value)
self.point_to_value(old_obj.value, rec=rec)
# overwrite the old object with the new index
self.file.write(pickle.dumps(old_obj))
# save the new instance in r flag
Expand All @@ -123,14 +122,23 @@ def solve_colision(self, old_obj, new_obj):
else:
pass

def point_to_value(self, value):
def point_to_value(self, value, rec=None):
""" This method point to index in a file """

self.file.seek(0)
value = int(value)
index = self.mod(value)
self.file.seek(index * self.STRUCT_SIZE + len(pickle.dumps(self.SIZE_OF_FILE)))

if rec:
obj = None
try:
obj = pickle.loads(self.file.read())
except:
self.file.seek(index * self.STRUCT_SIZE + len(pickle.dumps(self.SIZE_OF_FILE)))
if obj and obj.index and (value is not obj.value):
self.point_to_value(obj.index)

def insert_record(self):
# os.path.getsize(self.filename) -> 'full archive'

Expand Down

0 comments on commit 309a073

Please sign in to comment.