#if FAT namespace LinqInternal.Threading { /// /// Provides a mechanism to get an object that represents a version of a mutable resource /// internal sealed partial class VersionProvider { private Target _target; private Advancer _tryAdvance; /// /// Creates a new VersionProvider /// public VersionProvider() { _target = new Target(out _tryAdvance); } internal delegate bool Advancer(out long number); /// /// Advances the current up to date version /// public void Advance() { long number; if (!_tryAdvance.Invoke(out number)) { _target = new Target(out _tryAdvance); } } /// /// Advances the current up to date version and returns a VersionToken for the new version /// /// A VersionToken representing the advanced version public VersionToken AdvanceNewToken() { long number; if (!_tryAdvance.Invoke(out number)) { _target = new Target(out _tryAdvance); } return new VersionToken(this, _target, number); } /// /// Creates a new VersionToken, it should be considered to be out of date /// /// A new VersionToken public VersionToken NewToken() { return new VersionToken(this); } } } #endif