public void SetNextValueTest003() { List <int> l = new List <int>(); var hack = 0; var a = InterlockedUtilty.SetNextValue(ref l, 42, (o, a) => { o.Add(a); if (hack == 0) { l = new List <int>() { -1 }; hack++; } return(o); }, (o) => { l = new List <int>() { -2 }; hack++; Assert.Equal(42, o[0]); }); Assert.NotNull(l); Assert.Equal(2, hack); Assert.Equal(new List <int>() { -2, 42 }, l); }
protected void SetResource(T resource) { if (ReferenceEquals(this._Resource, resource)) { return; } bool oldResource = (this._Resource is object); bool newResource = (resource is object); using (var r = this._Resource) { this._Resource = resource; } if (oldResource && !newResource) { if (InterlockedUtilty.BitwiseSet(ref this._DisposeState, (int)(DisposeState.FinalizeSuppressed))) { System.GC.SuppressFinalize(this); } } else if (!oldResource && newResource) { if (InterlockedUtilty.BitwiseClear(ref this._DisposeState, (int)(DisposeState.FinalizeSuppressed))) { System.GC.ReRegisterForFinalize(this); } } }
public void SetNextValueTest002() { List <int> l = null; var a = InterlockedUtilty.SetNextValue(ref l, 1, (o, a) => { var r = o ?? new List <int>(); r.Add(a); return(r); }, (o) => Assert.Equal("Cannot", "be")); var b = InterlockedUtilty.SetNextValue(ref l, 2, (o, a) => { var r = o ?? new List <int>(); r.Add(a); return(r); }, (o) => Assert.Equal("Cannot", "be")); Assert.NotNull(l); Assert.Same(l, a); Assert.Same(a, b); Assert.Equal(new List <int>() { 1, 2 }, l); }
public void SetNextValueTest001() { List <int> l = new List <int>() { 1 }; var o = InterlockedUtilty.SetNextValue(ref l, 2, (o, a) => { var r = o ?? new List <int>(); r.Add(a); return(r); }, (v) => Assert.Equal("Cannot", "be")); Assert.Same(o, l); Assert.Equal(new List <int>() { 1, 2 }, l); }
protected T ReadResourceAndForget() { var result = this._Resource; if (result is object) { this._Resource = null; if (InterlockedUtilty.BitwiseSet(ref this._DisposeState, (int)(DisposeState.FinalizeSuppressed))) { System.GC.SuppressFinalize(this); } } return(result); }
public void Dispose() { try { this.Dispose(disposing: true); InterlockedUtilty.BitwiseSet(ref this._DisposeState, (int)(DisposeState.Disposed)); } catch { InterlockedUtilty.BitwiseSet(ref this._DisposeState, (int)(DisposeState.DisposedAndFaulted)); throw; } finally { if (InterlockedUtilty.BitwiseSet(ref this._DisposeState, (int)(DisposeState.FinalizeSuppressed))) { System.GC.SuppressFinalize(this); } } }
public void BitwiseClearTest() { { int a = 0; Assert.False(InterlockedUtilty.BitwiseClear(ref a, 1)); Assert.Equal(0, a); } { int a = 0; Assert.False(InterlockedUtilty.BitwiseClear(ref a, 2)); Assert.Equal(0, a); } { int b = 1; Assert.True(InterlockedUtilty.BitwiseClear(ref b, 1)); Assert.Equal(0, b); } { int b = 1; Assert.False(InterlockedUtilty.BitwiseClear(ref b, 2)); Assert.Equal(1, b); } }
public void BitwiseSetTest() { { int a = 0; Assert.True(InterlockedUtilty.BitwiseSet(ref a, 1)); Assert.Equal(1, a); } { int a = 2; Assert.True(InterlockedUtilty.BitwiseSet(ref a, 1)); Assert.Equal(3, a); } { int b = 1; Assert.False(InterlockedUtilty.BitwiseSet(ref b, 1)); Assert.Equal(1, b); } { int b = 3; Assert.False(InterlockedUtilty.BitwiseSet(ref b, 1)); Assert.Equal(3, b); } }