57 lines
1.4 KiB
C#
57 lines
1.4 KiB
C#
using InnovEnergy.S3.Drivers.Internal;
|
|
using InnovEnergy.S3.Drivers.Internal.Delegates;
|
|
using InnovEnergy.S3.Metadata;
|
|
using InnovEnergy.S3.Records.Specialized;
|
|
using InnovEnergy.Time.Unix;
|
|
|
|
namespace InnovEnergy.S3.Drivers;
|
|
|
|
using Levels = IReadOnlyList<AggregationLevel>;
|
|
using Memory = Dictionary<String, TimeStampedRecord>;
|
|
|
|
public class MemoryDriver : Writer
|
|
{
|
|
|
|
public MemoryDriver(Levels levels, UnixTime startTime, Memory memory) :
|
|
base(
|
|
startTime,
|
|
levels,
|
|
ReadRecord(memory),
|
|
WriteRecord(memory)
|
|
)
|
|
{
|
|
}
|
|
|
|
private static String GetKey(AggregationLevel level, UInt32 index)
|
|
{
|
|
return $"{level}/{index}";
|
|
}
|
|
|
|
private static ReadRecord ReadRecord(Memory memory)
|
|
{
|
|
Task<TimeStampedRecord> Read(AggregationLevel level, UInt32 index)
|
|
{
|
|
var key = GetKey(level, index);
|
|
|
|
var result = memory.TryGetValue(key, out var tsRecord)
|
|
? tsRecord
|
|
: TimeStampedRecord.Empty();
|
|
|
|
return Task.FromResult(result);
|
|
}
|
|
|
|
return Read;
|
|
}
|
|
|
|
private static WriteRecord WriteRecord(Memory memory)
|
|
{
|
|
Task Write(TimeStampedRecord record, AggregationLevel level, UInt32 index)
|
|
{
|
|
var key = GetKey(level, index);
|
|
memory[key] = record;
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
return Write;
|
|
}
|
|
} |