@@ -6,39 +6,39 @@ namespace ManagedCode.TimeSeries.Abstractions;
66public abstract class BaseTimeSeries < T , TSample , TSelf > : ITimeSeries < T , TSample , TSelf > where TSelf : ITimeSeries < T , TSample , TSelf >
77{
88 private const int DefaultSampleCount = 100 ;
9- private readonly int _samplesCount ;
109 protected object _sync = new ( ) ;
1110
12- protected BaseTimeSeries ( TimeSpan sampleInterval , int samplesCount )
11+ protected BaseTimeSeries ( TimeSpan sampleInterval , int maxSamplesCount )
1312 {
14- _samplesCount = samplesCount ;
13+ MaxSamplesCount = maxSamplesCount ;
1514 SampleInterval = sampleInterval ;
1615 Start = DateTimeOffset . UtcNow . Round ( SampleInterval ) ;
1716 End = Start ;
1817 }
1918
20- protected BaseTimeSeries ( TimeSpan sampleInterval , int samplesCount , DateTimeOffset start , DateTimeOffset end , DateTimeOffset lastDate )
19+ protected BaseTimeSeries ( TimeSpan sampleInterval , int maxSamplesCount , DateTimeOffset start , DateTimeOffset end , DateTimeOffset lastDate )
2120 {
22- _samplesCount = samplesCount ;
21+ MaxSamplesCount = maxSamplesCount ;
2322 SampleInterval = sampleInterval ;
2423 Start = start . Round ( SampleInterval ) ;
2524 End = end . Round ( SampleInterval ) ;
2625 LastDate = lastDate ;
2726 }
2827
29- public Dictionary < DateTimeOffset , TSample > Samples { get ; } = new ( ) ;
28+ public Dictionary < DateTimeOffset , TSample > Samples { get ; protected set ; } = new ( ) ;
3029 public DateTimeOffset Start { get ; }
3130 public DateTimeOffset End { get ; protected set ; }
32- public TimeSpan SampleInterval { get ; }
31+
32+ public TimeSpan SampleInterval { get ; protected set ; }
33+ public int MaxSamplesCount { get ; protected set ; }
3334
3435 public DateTimeOffset LastDate { get ; protected set ; }
3536
36- public int SamplesCount => Samples . Count ;
3737 public ulong DataCount { get ; protected set ; }
3838
39- public bool IsFull => Samples . Count >= _samplesCount ;
39+ public bool IsFull => Samples . Count >= MaxSamplesCount ;
4040 public bool IsEmpty => Samples . Count == 0 ;
41- public bool IsOverflow => Samples . Count > _samplesCount ;
41+ public bool IsOverflow => Samples . Count > MaxSamplesCount ;
4242
4343 public void AddNewData ( T data )
4444 {
@@ -67,7 +67,7 @@ protected void CheckSamplesSize()
6767 {
6868 lock ( _sync )
6969 {
70- if ( _samplesCount <= 0 )
70+ if ( MaxSamplesCount <= 0 )
7171 {
7272 return ;
7373 }
@@ -81,7 +81,7 @@ protected void CheckSamplesSize()
8181
8282 public void MarkupAllSamples ( MarkupDirection direction = MarkupDirection . Past )
8383 {
84- var samples = _samplesCount > 0 ? _samplesCount : DefaultSampleCount ;
84+ var samples = MaxSamplesCount > 0 ? MaxSamplesCount : DefaultSampleCount ;
8585
8686 if ( direction is MarkupDirection . Past or MarkupDirection . Feature )
8787 {
@@ -126,7 +126,7 @@ public void MarkupAllSamples(MarkupDirection direction = MarkupDirection.Past)
126126 public void DeleteOverdueSamples ( )
127127 {
128128 var dateTime = DateTimeOffset . UtcNow . Round ( SampleInterval ) ;
129- for ( int i = 0 ; i < _samplesCount ; i ++ )
129+ for ( int i = 0 ; i < MaxSamplesCount ; i ++ )
130130 {
131131 dateTime = dateTime . Subtract ( SampleInterval ) ;
132132 }
@@ -145,8 +145,7 @@ public void DeleteOverdueSamples()
145145
146146 public TSelf PureMerge ( IEnumerable < TSelf > accumulators )
147147 {
148- var empty = Activator . CreateInstance < TSelf > ( ) ;
149- empty . Resample ( SampleInterval , SamplesCount ) ;
148+ var empty = ( TSelf ) Activator . CreateInstance ( typeof ( TSelf ) , SampleInterval , MaxSamplesCount ) ! ;
150149
151150 foreach ( var accumulator in accumulators )
152151 {
@@ -166,8 +165,7 @@ public void Merge(IEnumerable<TSelf> accumulators)
166165
167166 public TSelf PureMerge ( TSelf accumulator )
168167 {
169- var empty = Activator . CreateInstance < TSelf > ( ) ;
170- empty . Resample ( SampleInterval , SamplesCount ) ;
168+ var empty = ( TSelf ) Activator . CreateInstance ( typeof ( TSelf ) , SampleInterval , MaxSamplesCount ) ! ;
171169 empty . Merge ( accumulator ) ;
172170
173171 return empty ;
@@ -180,10 +178,4 @@ public TSelf PureMerge(TSelf accumulator)
180178
181179 [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
182180 public abstract void Merge ( TSelf accumulator ) ;
183-
184-
185- public virtual void Dispose ( )
186- {
187- //skip
188- }
189181}
0 commit comments