You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.6 KiB
60 lines
1.6 KiB
#if FAT |
|
|
|
namespace LinqInternal.Threading |
|
{ |
|
/// <summary> |
|
/// Provides a mechanism to get an object that represents a version of a mutable resource |
|
/// </summary> |
|
internal sealed partial class VersionProvider |
|
{ |
|
private Target _target; |
|
private Advancer _tryAdvance; |
|
|
|
/// <summary> |
|
/// Creates a new VersionProvider |
|
/// </summary> |
|
public VersionProvider() |
|
{ |
|
_target = new Target(out _tryAdvance); |
|
} |
|
|
|
internal delegate bool Advancer(out long number); |
|
|
|
/// <summary> |
|
/// Advances the current up to date version |
|
/// </summary> |
|
public void Advance() |
|
{ |
|
long number; |
|
if (!_tryAdvance.Invoke(out number)) |
|
{ |
|
_target = new Target(out _tryAdvance); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// Advances the current up to date version and returns a VersionToken for the new version |
|
/// </summary> |
|
/// <returns>A VersionToken representing the advanced version</returns> |
|
public VersionToken AdvanceNewToken() |
|
{ |
|
long number; |
|
if (!_tryAdvance.Invoke(out number)) |
|
{ |
|
_target = new Target(out _tryAdvance); |
|
} |
|
return new VersionToken(this, _target, number); |
|
} |
|
|
|
/// <summary> |
|
/// Creates a new VersionToken, it should be considered to be out of date |
|
/// </summary> |
|
/// <returns>A new VersionToken</returns> |
|
public VersionToken NewToken() |
|
{ |
|
return new VersionToken(this); |
|
} |
|
} |
|
} |
|
|
|
#endif |