Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
del cache[old_key]
else:
# The cache is not full
if first_freq_node.frequency != 1:
# The first element in frequency list has its frequency other than 1 (> 1)
# Creating a new node in frequency list with 1 as its frequency required
# We also need to create a new cache list and attach it to this new node
# Create a cache root and a frequency node
cache_root = _CacheNode.root()
freq_node = _FreqNode(root, first_freq_node, 1, cache_root)
cache_root.parent = freq_node
# Create another cache node to store data
cache_node = _CacheNode(cache_root, cache_root, freq_node, key, value)
# Modify references
cache_root.prev = cache_root.next = cache_node
first_freq_node.prev = root.next = freq_node # note: DO NOT swap "=", because first_freq_node == root.next
else:
# We create a new cache node in the cache list
# under the frequency node with frequency 1
# Create a cache node and store data in it
cache_head = first_freq_node.cache_head
cache_node = _CacheNode(cache_head, cache_head.next, first_freq_node, key, value)
# Modify references
cache_node.prev.next = cache_node.next.prev = cache_node
cache_root.parent = freq_node
# Create another cache node to store data
cache_node = _CacheNode(cache_root, cache_root, freq_node, key, value)
# Modify references
cache_root.prev = cache_root.next = cache_node
first_freq_node.prev = root.next = freq_node # note: DO NOT swap "=", because first_freq_node == root.next
else:
# We create a new cache node in the cache list
# under the frequency node with frequency 1
# Create a cache node and store data in it
cache_head = first_freq_node.cache_head
cache_node = _CacheNode(cache_head, cache_head.next, first_freq_node, key, value)
# Modify references
cache_node.prev.next = cache_node.next.prev = cache_node
# Finally, insert the data into the cache
cache[key] = cache_node
if first_freq_node.cache_head.next == first_freq_node.cache_head:
# Getting here means that we just deleted the only data node in the cache list
# under the first frequency list
# Note: there is still an empty sentinel node
# We then need to destroy the sentinel node and its parent frequency node too
first_freq_node.cache_head.destroy()
first_freq_node.destroy()
first_freq_node = root.next # update
# Delete from cache
del cache[old_key]
# Prepare a new frequency node, a cache root node and a cache data node
empty_cache_root = _CacheNode.root()
freq_node = _FreqNode(root, first_freq_node, 1, empty_cache_root)
cache_node = _CacheNode(empty_cache_root, empty_cache_root, freq_node, key, value)
empty_cache_root.parent = freq_node
# Modify references
root.next.prev = root.next = freq_node
empty_cache_root.prev = empty_cache_root.next = cache_node
else:
# We can find the last element in the cache list under the first frequency list
# Moving it to the head and replace the stored data with a new key and a new value
# This is more efficient
# Find the target
cache_head = first_freq_node.cache_head
manipulated_node = cache_head.prev
# Modify references