def remove(self, key):
     entry = self.__find(key)
     if entry is not None:
         copy_entry = map_entry(entry.key, entry.value)
         entry.key = None
         entry.value = None
         return copy_entry
 def remove(self, key):
     entry = self.__find(key)
     if entry is not None:
         copy_entry = map_entry(entry.key, entry.value)
         entry.key = '__EMPTY__'
         entry.value = '__EMPTY__'
         return copy_entry
 def __init__(self, initial_elements=17, load_factor=0.5, cmpfunction=None):
     self.size = 0
     self.spaces = initial_elements
     self.load_factor = load_factor
     self.current_factor = load_factor
     self.cmpfunction = cmpfunction
     self.table = lt.lista('AL', cmpfunction, 0)
     for bucket in range(initial_elements * int(load_factor**-1)):
         self.table.add_last(map_entry())
 def __init__(self, initial_elements=17, load_factor=2, cmpfunction=None):
     self.size = 0
     self.spaces = initial_elements
     self.load_factor = load_factor
     self.cmpfunction = cmpfunction
     self.table = lt.lista('AL', cmpfunction, 0)
     for i in range(self.spaces):
         bucket = lt.lista('SL', cmpfunction)
         for j in range(int(load_factor)):
             bucket.add_last(map_entry())
         self.table.add_last(bucket)
    def __rehash(self):
        self.spaces *= 2
        self.size = 0
        old_table = self.table
        new_table = lt.lista('AL', self.cmpfunction, 0)
        self.table = new_table
        for bucket in range(self.spaces):
            self.table.add_first(map_entry())

        for bucket in old_table:
            if bucket.key is not None and bucket.key != '__EMPTY__':
                self.put(bucket.key, bucket.value)
    def put(self, key, value):
        table_pos = self.__hash_value(key)
        replaced = False
        bucket = self.table.get_element(table_pos)
        for entry in bucket:
            if entry.key is None and not replaced:
                entry.key = key
                entry.value = value
                replaced = True
                self.size += 1

            if entry.key == key:
                entry.value = value
                replaced = True

        if not replaced:
            bucket.add_last(map_entry(key, value))
            self.size += 1
    def put(self, key, value):
        table_pos = self.__hash_value(key)
        entry = map_entry(key, value)
        iterations = 0
        inserted = False
        while not inserted and iterations < self.table.size:
            bucket = self.table.get_element(table_pos)
            if bucket.key is None or bucket.key == '__EMPTY__':
                bucket.key = key
                bucket.value = value
                self.size += 1
                self.current_factor = float(self.size / self.spaces)
                inserted = True
            else:
                table_pos += 1
                if table_pos >= self.table.size:
                    table_pos = 0
            iterations += 1

        if self.current_factor > self.load_factor:
            self.__rehash()