Skip to content

Commit 7681215

Browse files
committed
Some fixes
1 parent fd4183b commit 7681215

File tree

3 files changed

+188
-188
lines changed

3 files changed

+188
-188
lines changed
Lines changed: 103 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -1,102 +1,103 @@
1-
// using System.Numerics;
2-
//
3-
// namespace ManagedCode.TimeSeries;
4-
//
5-
// public abstract class BaseGroupTimeSeriesSummer<TNumber, TSummer>
6-
// where TSummer : BaseTimeSeriesSummer<TNumber>, IDisposable
7-
// where TNumber : INumber<TNumber>
8-
// {
9-
// private readonly Strategy _strategy;
10-
// private readonly bool _deleteOverdueSamples;
11-
// private readonly Timer _timer;
12-
// public readonly Dictionary<string, TSummer> TimeSeries = new();
13-
//
14-
// protected BaseGroupTimeSeriesSummer(TimeSpan sampleInterval, bool deleteOverdueSamples)
15-
// {
16-
// if (deleteOverdueSamples)
17-
// {
18-
// _timer = new Timer(Callback, null, sampleInterval, sampleInterval);
19-
// }
20-
// }
21-
//
22-
// private void Callback(object? state)
23-
// {
24-
// foreach (var summer in TimeSeries.ToArray())
25-
// {
26-
// summer.Value.DeleteOverdueSamples();
27-
// lock (TimeSeries)
28-
// {
29-
// if (summer.Value.IsEmpty)
30-
// {
31-
// TimeSeries.Remove(summer.Key);
32-
// }
33-
// }
34-
// }
35-
// }
36-
//
37-
// public virtual void AddNewData(string key, TNumber value)
38-
// {
39-
// lock (TimeSeries)
40-
// {
41-
// if (TimeSeries.TryGetValue(key, out var summer))
42-
// {
43-
// summer.AddNewData(value);
44-
// }
45-
// else
46-
// {
47-
// var newSummer = CreateSummer();
48-
// newSummer.AddNewData(value);
49-
// TimeSeries[key] = newSummer;
50-
// }
51-
// }
52-
// }
53-
//
54-
// public virtual void Increment(string key)
55-
// {
56-
// lock (TimeSeries)
57-
// {
58-
// if (TimeSeries.TryGetValue(key, out var summer))
59-
// {
60-
// summer.Increment();
61-
// }
62-
// else
63-
// {
64-
// var newSummer = CreateSummer();
65-
// newSummer.Increment();
66-
// TimeSeries[key] = newSummer;
67-
// }
68-
// }
69-
// }
70-
//
71-
// public virtual void Decrement(string key)
72-
// {
73-
// lock (TimeSeries)
74-
// {
75-
// if (TimeSeries.TryGetValue(key, out var summer))
76-
// {
77-
// summer.Decrement();
78-
// }
79-
// else
80-
// {
81-
// var newSummer = CreateSummer();
82-
// newSummer.Decrement();
83-
// TimeSeries[key] = newSummer;
84-
// }
85-
// }
86-
// }
87-
//
88-
// public abstract TNumber Average();
89-
//
90-
// public abstract TNumber Min();
91-
//
92-
// public abstract TNumber Max();
93-
//
94-
// public abstract TNumber Sum();
95-
//
96-
// protected abstract TSummer CreateSummer();
97-
//
98-
// public void Dispose()
99-
// {
100-
// _timer?.Dispose();
101-
// }
102-
// }
1+
using System.Numerics;
2+
3+
namespace ManagedCode.TimeSeries.Abstractions;
4+
5+
public abstract class BaseGroupTimeSeriesSummer<TNumber, TSummer, TSelf>
6+
where TSummer : BaseTimeSeriesSummer<TNumber, TSelf>
7+
where TNumber : INumber<TNumber>
8+
where TSelf : BaseTimeSeries<TNumber, TNumber, TSelf>
9+
{
10+
private readonly Strategy _strategy;
11+
private readonly bool _deleteOverdueSamples;
12+
private readonly Timer _timer;
13+
public readonly Dictionary<string, TSummer> TimeSeries = new();
14+
15+
protected BaseGroupTimeSeriesSummer(TimeSpan sampleInterval, bool deleteOverdueSamples)
16+
{
17+
if (deleteOverdueSamples)
18+
{
19+
_timer = new Timer(Callback, null, sampleInterval, sampleInterval);
20+
}
21+
}
22+
23+
private void Callback(object? state)
24+
{
25+
foreach (var summer in TimeSeries.ToArray())
26+
{
27+
summer.Value.DeleteOverdueSamples();
28+
lock (TimeSeries)
29+
{
30+
if (summer.Value.IsEmpty)
31+
{
32+
TimeSeries.Remove(summer.Key);
33+
}
34+
}
35+
}
36+
}
37+
38+
public virtual void AddNewData(string key, TNumber value)
39+
{
40+
lock (TimeSeries)
41+
{
42+
if (TimeSeries.TryGetValue(key, out var summer))
43+
{
44+
summer.AddNewData(value);
45+
}
46+
else
47+
{
48+
var newSummer = CreateSummer();
49+
newSummer.AddNewData(value);
50+
TimeSeries[key] = newSummer;
51+
}
52+
}
53+
}
54+
55+
public virtual void Increment(string key)
56+
{
57+
lock (TimeSeries)
58+
{
59+
if (TimeSeries.TryGetValue(key, out var summer))
60+
{
61+
summer.Increment();
62+
}
63+
else
64+
{
65+
var newSummer = CreateSummer();
66+
newSummer.Increment();
67+
TimeSeries[key] = newSummer;
68+
}
69+
}
70+
}
71+
72+
public virtual void Decrement(string key)
73+
{
74+
lock (TimeSeries)
75+
{
76+
if (TimeSeries.TryGetValue(key, out var summer))
77+
{
78+
summer.Decrement();
79+
}
80+
else
81+
{
82+
var newSummer = CreateSummer();
83+
newSummer.Decrement();
84+
TimeSeries[key] = newSummer;
85+
}
86+
}
87+
}
88+
89+
public abstract TNumber Average();
90+
91+
public abstract TNumber Min();
92+
93+
public abstract TNumber Max();
94+
95+
public abstract TNumber Sum();
96+
97+
protected abstract TSummer CreateSummer();
98+
99+
public void Dispose()
100+
{
101+
_timer?.Dispose();
102+
}
103+
}

ManagedCode.TimeSeries/Abstractions/BaseTimeSeries.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace ManagedCode.TimeSeries.Abstractions;
66
public abstract class BaseTimeSeries<T, TSample, TSelf> : ITimeSeries<T, TSelf> where TSelf : BaseTimeSeries<T, TSample, TSelf>
77
{
88
private const int DefaultSampleCount = 100;
9-
protected object _sync = new();
9+
protected readonly object _sync = new();
1010

1111
protected BaseTimeSeries(TimeSpan sampleInterval, int maxSamplesCount)
1212
{
Lines changed: 84 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -1,85 +1,84 @@
1-
// namespace ManagedCode.TimeSeries;
2-
//
3-
// public abstract class BaseTimeSeriesByValueAccumulator<T, TSelf> : BaseTimeSeries<T, HashSet<T>, TSelf> where TSelf : ITimeSeries<T, HashSet<T>, TSelf>
4-
// {
5-
// protected BaseTimeSeriesByValueAccumulator(TimeSpan sampleInterval, int samplesCount) : base(sampleInterval, samplesCount)
6-
// {
7-
// }
8-
//
9-
// protected BaseTimeSeriesByValueAccumulator(TimeSpan sampleInterval, int samplesCount, DateTimeOffset start, DateTimeOffset end,
10-
// DateTimeOffset lastDate)
11-
// : base(sampleInterval, samplesCount, start, end, lastDate)
12-
// {
13-
// }
14-
//
15-
// protected override void AddData(DateTimeOffset date, T data)
16-
// {
17-
// if (!Samples.ContainsKey(date))
18-
// {
19-
// Samples.Add(date, new HashSet<T>());
20-
// }
21-
//
22-
// Samples[date].Add(data);
23-
// }
24-
//
25-
// public BaseTimeSeriesByValueAccumulator<T> Trim()
26-
// {
27-
// TrimStart();
28-
// TrimEnd();
29-
// return this;
30-
// }
31-
//
32-
// public BaseTimeSeriesByValueAccumulator<T> TrimStart()
33-
// {
34-
// foreach (var item in Samples.ToArray())
35-
// {
36-
// if (item.Value.Count > 0)
37-
// {
38-
// break;
39-
// }
40-
//
41-
// Samples.Remove(item.Key);
42-
// }
43-
//
44-
// return this;
45-
// }
46-
//
47-
// public BaseTimeSeriesByValueAccumulator<T> TrimEnd()
48-
// {
49-
// foreach (var item in Samples.Reverse().ToArray())
50-
// {
51-
// if (item.Value.Count > 0)
52-
// {
53-
// break;
54-
// }
55-
//
56-
// Samples.Remove(item.Key);
57-
// }
58-
//
59-
// return this;
60-
// }
61-
//
62-
// public BaseTimeSeriesByValueAccumulator<T> Merge(BaseTimeSeriesByValueAccumulator<T> accumulator)
63-
// {
64-
// DataCount += accumulator.DataCount;
65-
// LastDate = accumulator.LastDate > LastDate ? accumulator.LastDate : LastDate;
66-
// foreach (var sample in accumulator.Samples.ToArray())
67-
// {
68-
// if (Samples.TryGetValue(sample.Key, out var hashSet))
69-
// {
70-
// foreach (var v in sample.Value.ToArray())
71-
// {
72-
// hashSet.Add(v);
73-
// }
74-
// }
75-
// else
76-
// {
77-
// Samples.Add(sample.Key, sample.Value);
78-
// }
79-
// }
80-
//
81-
// CheckSamplesSize();
82-
//
83-
// return this;
84-
// }
85-
// }
1+
namespace ManagedCode.TimeSeries.Abstractions;
2+
3+
public abstract class BaseTimeSeriesByValueAccumulator<T, TSelf> : BaseTimeSeries<T, HashSet<T>, TSelf>
4+
where TSelf : BaseTimeSeries<T, HashSet<T>, TSelf>
5+
{
6+
protected BaseTimeSeriesByValueAccumulator(TimeSpan sampleInterval, int samplesCount) : base(sampleInterval, samplesCount)
7+
{
8+
}
9+
10+
protected BaseTimeSeriesByValueAccumulator(TimeSpan sampleInterval, int samplesCount, DateTimeOffset start, DateTimeOffset end,
11+
DateTimeOffset lastDate)
12+
: base(sampleInterval, samplesCount, start, end, lastDate)
13+
{
14+
}
15+
16+
protected override void AddData(DateTimeOffset date, T data)
17+
{
18+
if (!Samples.ContainsKey(date))
19+
{
20+
Samples.Add(date, new HashSet<T>());
21+
}
22+
23+
Samples[date].Add(data);
24+
}
25+
26+
// public BaseTimeSeriesByValueAccumulator<T> Trim()
27+
// {
28+
// TrimStart();
29+
// TrimEnd();
30+
// return this;
31+
// }
32+
//
33+
// public BaseTimeSeriesByValueAccumulator<T> TrimStart()
34+
// {
35+
// foreach (var item in Samples.ToArray())
36+
// {
37+
// if (item.Value.Count > 0)
38+
// {
39+
// break;
40+
// }
41+
//
42+
// Samples.Remove(item.Key);
43+
// }
44+
//
45+
// return this;
46+
// }
47+
//
48+
// public BaseTimeSeriesByValueAccumulator<T> TrimEnd()
49+
// {
50+
// foreach (var item in Samples.Reverse().ToArray())
51+
// {
52+
// if (item.Value.Count > 0)
53+
// {
54+
// break;
55+
// }
56+
//
57+
// Samples.Remove(item.Key);
58+
// }
59+
//
60+
// return this;
61+
// }
62+
63+
public override void Merge(TSelf accumulator)
64+
{
65+
DataCount += accumulator.DataCount;
66+
LastDate = accumulator.LastDate > LastDate ? accumulator.LastDate : LastDate;
67+
foreach (var sample in accumulator.Samples.ToArray())
68+
{
69+
if (Samples.TryGetValue(sample.Key, out var hashSet))
70+
{
71+
foreach (var v in sample.Value.ToArray())
72+
{
73+
hashSet.Add(v);
74+
}
75+
}
76+
else
77+
{
78+
Samples.Add(sample.Key, sample.Value);
79+
}
80+
}
81+
82+
CheckSamplesSize();
83+
}
84+
}

0 commit comments

Comments
 (0)