mirror of
https://github.com/mihakralj/QuanTAlib.git
synced 2026-07-31 10:57:43 +00:00
967096d4f5
- Removed WmaVector class to streamline weighted moving average calculations. - Simplified RingBuffer implementation by removing unnecessary comments and improving clarity. - Enhanced SIMD extensions for better performance and readability. - Updated TBar and TBarSeries classes to improve property calculations and reduce overhead. - Cleaned up TValue struct by removing redundant comments. - Added comprehensive unit tests for IndicatorExtensions and TrimaIndicator to ensure functionality and correctness.
48 lines
1.6 KiB
C#
48 lines
1.6 KiB
C#
using System.Runtime.CompilerServices;
|
|
|
|
namespace QuanTAlib;
|
|
|
|
/// <summary>
|
|
/// A lightweight struct representing a time-value pair.
|
|
/// Pure data type: 16 bytes (long + double).
|
|
/// </summary>
|
|
[SkipLocalsInit]
|
|
public readonly struct TValue : IEquatable<TValue>
|
|
{
|
|
public readonly long Time;
|
|
public readonly double Value;
|
|
|
|
public DateTime AsDateTime => new(Time, DateTimeKind.Utc);
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public TValue(long time, double value)
|
|
{
|
|
Time = time;
|
|
Value = value;
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public TValue(DateTime time, double value)
|
|
{
|
|
Time = time.Ticks;
|
|
Value = value;
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static implicit operator double(TValue tv) => tv.Value;
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static implicit operator DateTime(TValue tv) => new(tv.Time, DateTimeKind.Utc);
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public override string ToString() => $"[{AsDateTime:yyyy-MM-dd HH:mm:ss}, {Value:F2}]";
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public bool Equals(TValue other) => Time == other.Time && Math.Abs(Value - other.Value) < 1e-9;
|
|
|
|
public override bool Equals(object? obj) => obj is TValue other && Equals(other);
|
|
public override int GetHashCode() => HashCode.Combine(Time, Value);
|
|
public static bool operator ==(TValue left, TValue right) => left.Equals(right);
|
|
public static bool operator !=(TValue left, TValue right) => !left.Equals(right);
|
|
}
|