OverviewFilesCommitsIssuesDocsReleasesPeers

godot-tumble_player_demo / hypergodot / utils / lru.gd

43 lines · gd ref:
# Least Recently Used Cache
## Use this if you want to keep track of a set, but with a limit

# Map from value to time last used
var values = {}
const DEFAULT_SIZE = 512

var max_size = DEFAULT_SIZE

func _init(new_max = DEFAULT_SIZE):
	max_size = new_max

func has(value):
	return value in values
	pass

func track(value):
	var time = OS.get_system_time_msecs()
	
	values[value] = time
	pass

func is_full():
	return size() > max_size

func size():
	return values.size()

func clear_oldest():
	var oldest = get_oldest()
	values.erase(oldest)
	pass
	
func get_oldest():
	var oldestTime = OS.get_system_time_msecs()
	var oldestValue = null
	for value in values.keys():
		var valueTime = values[value]
		if valueTime < oldestTime:
			oldestTime = valueTime
			oldestValue = value
	return oldestValue