first
This commit is contained in:
66
addons/netfox.internals/history-buffer.gd
Normal file
66
addons/netfox.internals/history-buffer.gd
Normal file
@@ -0,0 +1,66 @@
|
||||
extends RefCounted
|
||||
class_name _HistoryBuffer
|
||||
|
||||
# Maps ticks (int) to arbitrary data
|
||||
var _buffer: Dictionary = {}
|
||||
|
||||
func get_snapshot(tick: int):
|
||||
if _buffer.has(tick):
|
||||
return _buffer[tick]
|
||||
else:
|
||||
return null
|
||||
|
||||
func set_snapshot(tick: int, data):
|
||||
_buffer[tick] = data
|
||||
|
||||
func get_buffer() -> Dictionary:
|
||||
return _buffer
|
||||
|
||||
func get_closest_tick(tick: int) -> int:
|
||||
if _buffer.has(tick):
|
||||
return tick
|
||||
|
||||
if _buffer.is_empty():
|
||||
return -1
|
||||
|
||||
var earliest_tick = _buffer.keys().min()
|
||||
|
||||
if tick < earliest_tick:
|
||||
return earliest_tick
|
||||
|
||||
var latest_tick = _buffer.keys().max()
|
||||
|
||||
if tick > latest_tick:
|
||||
return latest_tick
|
||||
|
||||
return _buffer.keys() \
|
||||
.filter(func (key): return key < tick) \
|
||||
.max()
|
||||
|
||||
func get_history(tick: int):
|
||||
var closest_tick = get_closest_tick(tick)
|
||||
return _buffer.get(closest_tick)
|
||||
|
||||
func trim(earliest_tick_to_keep: int):
|
||||
var ticks := _buffer.keys()
|
||||
for tick in ticks:
|
||||
if tick < earliest_tick_to_keep:
|
||||
_buffer.erase(tick)
|
||||
|
||||
func clear():
|
||||
_buffer.clear()
|
||||
|
||||
func size() -> int:
|
||||
return _buffer.size()
|
||||
|
||||
func is_empty() -> bool:
|
||||
return _buffer.is_empty()
|
||||
|
||||
func has(tick) -> bool:
|
||||
return _buffer.has(tick)
|
||||
|
||||
func ticks() -> Array:
|
||||
return _buffer.keys()
|
||||
|
||||
func erase(tick):
|
||||
_buffer.erase(tick)
|
||||
Reference in New Issue
Block a user