mirror of
https://github.com/mihakralj/QuanTAlib.git
synced 2026-08-06 04:57:44 +00:00
feat(subscriptions): update event subscription handling to use non-nullable source parameters; remove defensive null checks
This commit is contained in:
@@ -81,6 +81,7 @@ Directory: `lib/[category]/[name]/` (e.g., `lib/trends/sma/`)
|
||||
* Validate all parameters (throw `ArgumentException` for invalid values).
|
||||
* Initialize `Name` property (e.g., `$"Sma({period})"`);
|
||||
* Support chaining: `public [Name](ITValuePublisher source, ...)`
|
||||
* **Event Subscription:** Subscribe to events directly (`source.Pub += ...`) when the source is passed as a non-nullable parameter. Do not use defensive null checks (`if (_source != null)`).
|
||||
|
||||
### The `Update` Method Contract
|
||||
|
||||
|
||||
@@ -551,7 +551,7 @@ public static class SimdExtensions
|
||||
vSum3 = Avx512F.Add(vSum3, vSum4);
|
||||
vSum = Avx512F.Add(vSum, vSum3);
|
||||
|
||||
Vector256<double> v256 = Avx512F.Add(vSum.GetLower(), vSum.GetUpper());
|
||||
Vector256<double> v256 = Avx.Add(vSum.GetLower(), vSum.GetUpper());
|
||||
Vector128<double> lower = v256.GetLower();
|
||||
Vector128<double> upper = v256.GetUpper();
|
||||
Vector128<double> combined = Sse2.Add(lower, upper);
|
||||
|
||||
@@ -69,7 +69,7 @@ public sealed class Bessel : AbstractBase, IDisposable
|
||||
{
|
||||
_publisher = source;
|
||||
_handler = item => Update(item);
|
||||
_publisher.Pub += _handler;
|
||||
source.Pub += _handler;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -85,7 +85,7 @@ public sealed class Bessel : AbstractBase, IDisposable
|
||||
|
||||
_publisher = source;
|
||||
_handler = item => Update(item);
|
||||
_publisher.Pub += _handler;
|
||||
source.Pub += _handler;
|
||||
}
|
||||
|
||||
public override bool IsHot => _state.IsHot;
|
||||
|
||||
@@ -25,8 +25,7 @@ public class BlmaTests
|
||||
[Fact]
|
||||
public void Constructor_ValidatesSource()
|
||||
{
|
||||
Assert.Throws<ArgumentNullException>(() => new Blma(null!, 10));
|
||||
Assert.Throws<ArgumentException>(() => new Blma(new object(), 10));
|
||||
Assert.Throws<NullReferenceException>(() => new Blma(null!, 10));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
||||
+3
-12
@@ -33,19 +33,10 @@ public sealed class Blma : AbstractBase, IDisposable
|
||||
_weightSum = CalculateWeights(period, _weights);
|
||||
}
|
||||
|
||||
public Blma(object source, int period) : this(period)
|
||||
public Blma(ITValuePublisher source, int period) : this(period)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(source);
|
||||
|
||||
if (source is ITValuePublisher pub)
|
||||
{
|
||||
_publisher = pub;
|
||||
_publisher.Pub += Handle;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ArgumentException("Source must implement ITValuePublisher", nameof(source));
|
||||
}
|
||||
_publisher = source;
|
||||
source.Pub += Handle;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
|
||||
@@ -58,7 +58,7 @@ public sealed class Dema : AbstractBase, IDisposable
|
||||
{
|
||||
_publisher = source;
|
||||
_listener = (item) => Update(item);
|
||||
_publisher.Pub += _listener;
|
||||
source.Pub += _listener;
|
||||
}
|
||||
|
||||
public Dema(double alpha)
|
||||
|
||||
@@ -8,7 +8,7 @@ public class PwmaTests
|
||||
{
|
||||
Assert.Throws<ArgumentException>(() => new Pwma(0));
|
||||
Assert.Throws<ArgumentException>(() => new Pwma(-1));
|
||||
Assert.Throws<ArgumentNullException>(() => new Pwma(null!, 10));
|
||||
Assert.Throws<NullReferenceException>(() => new Pwma(null!, 10));
|
||||
|
||||
var pwma = new Pwma(10);
|
||||
Assert.NotNull(pwma);
|
||||
|
||||
@@ -56,7 +56,6 @@ public sealed class Pwma : AbstractBase
|
||||
|
||||
public Pwma(ITValuePublisher source, int period) : this(period)
|
||||
{
|
||||
if (source == null) throw new ArgumentNullException(nameof(source));
|
||||
source.Pub += (item) => Update(item);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -81,7 +81,7 @@ public sealed class T3 : AbstractBase, IDisposable
|
||||
{
|
||||
_publisher = source;
|
||||
_handler = (item) => Update(item);
|
||||
_publisher.Pub += _handler;
|
||||
source.Pub += _handler;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -52,7 +52,7 @@ public sealed class Trima : AbstractBase, IDisposable
|
||||
public Trima(ITValuePublisher source, int period) : this(period)
|
||||
{
|
||||
_publisher = source;
|
||||
_publisher.Pub += _updateHandler;
|
||||
source.Pub += _updateHandler;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
|
||||
@@ -60,7 +60,7 @@ public sealed class Vidya : AbstractBase, IDisposable
|
||||
{
|
||||
_source = source;
|
||||
_pubHandler = (item) => Update(item);
|
||||
_source.Pub += _pubHandler;
|
||||
source.Pub += _pubHandler;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
|
||||
@@ -69,7 +69,7 @@ public sealed class Wma : AbstractBase, IDisposable
|
||||
{
|
||||
_source = source;
|
||||
_handler = (item) => Update(item);
|
||||
_source.Pub += _handler;
|
||||
source.Pub += _handler;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
|
||||
Reference in New Issue
Block a user