aspclassic-core/AspClassic.Scripting/ScopeVariable.cs
Jelle Luteijn 484dbfc9d9 progress
2022-05-15 11:19:49 +02:00

53 lines
832 B
C#

using System;
using System.Threading;
namespace AspClassic.Scripting;
public sealed class ScopeVariable : IScopeVariable, IWeakReferencable
{
private object _value;
private WeakReference _weakref;
private static readonly object _novalue = new object();
public bool HasValue => _value != _novalue;
public WeakReference WeakReference
{
get
{
if (_weakref == null)
{
_weakref = new WeakReference(this);
}
return _weakref;
}
}
internal ScopeVariable()
{
_value = _novalue;
}
public bool TryGetValue(out dynamic value)
{
value = _value;
if ((object)value != _novalue)
{
return true;
}
value = null;
return false;
}
public void SetValue(object value)
{
_value = value;
}
public bool DeleteValue()
{
return Interlocked.Exchange(ref _value, _novalue) != _novalue;
}
}