Files
Intellix/Intelix.Helper/ConcurrentLong.cs
T
2026-08-27 10:55:23 -06:00

60 lines
1.0 KiB
C#

using System.Threading;
namespace Intelix.Helper;
public struct ConcurrentLong
{
private long _value;
public long Value
{
get
{
return Interlocked.Read(ref _value);
}
set
{
Interlocked.Exchange(ref _value, value);
}
}
public ConcurrentLong(long initial)
{
_value = initial;
}
public static ConcurrentLong operator ++(ConcurrentLong x)
{
Interlocked.Increment(ref x._value);
return x;
}
public static ConcurrentLong operator --(ConcurrentLong x)
{
Interlocked.Decrement(ref x._value);
return x;
}
public static implicit operator long(ConcurrentLong x)
{
return x.Value;
}
public static implicit operator ConcurrentLong(long v)
{
return new ConcurrentLong(v);
}
public static ConcurrentLong operator +(ConcurrentLong x, long y)
{
Interlocked.Add(ref x._value, y);
return x;
}
public static ConcurrentLong operator -(ConcurrentLong x, long y)
{
Interlocked.Add(ref x._value, -y);
return x;
}
}