|
@@ -2,7 +2,6 @@
|
|
|
// The .NET Foundation licenses this file to you under the Apache 2.0 License.
|
|
// The .NET Foundation licenses this file to you under the Apache 2.0 License.
|
|
|
// See the LICENSE file in the project root for more information.
|
|
// See the LICENSE file in the project root for more information.
|
|
|
|
|
|
|
|
-using System.Collections;
|
|
|
|
|
using System.Collections.Generic;
|
|
using System.Collections.Generic;
|
|
|
using System.ComponentModel;
|
|
using System.ComponentModel;
|
|
|
using System.Reactive.Concurrency;
|
|
using System.Reactive.Concurrency;
|
|
@@ -22,11 +21,7 @@ namespace System.Reactive.PlatformServices
|
|
|
{
|
|
{
|
|
|
private static Lazy<ISystemClock> s_serviceSystemClock = new Lazy<ISystemClock>(InitializeSystemClock);
|
|
private static Lazy<ISystemClock> s_serviceSystemClock = new Lazy<ISystemClock>(InitializeSystemClock);
|
|
|
private static Lazy<INotifySystemClockChanged> s_serviceSystemClockChanged = new Lazy<INotifySystemClockChanged>(InitializeSystemClockChanged);
|
|
private static Lazy<INotifySystemClockChanged> s_serviceSystemClockChanged = new Lazy<INotifySystemClockChanged>(InitializeSystemClockChanged);
|
|
|
-#if NO_WEAKREFOFT
|
|
|
|
|
- private static readonly HashSet<WeakReference> s_systemClockChanged = new HashSet<WeakReference>();
|
|
|
|
|
-#else
|
|
|
|
|
private static readonly HashSet<WeakReference<LocalScheduler>> s_systemClockChanged = new HashSet<WeakReference<LocalScheduler>>();
|
|
private static readonly HashSet<WeakReference<LocalScheduler>> s_systemClockChanged = new HashSet<WeakReference<LocalScheduler>>();
|
|
|
-#endif
|
|
|
|
|
private static IDisposable s_systemClockChangedHandlerCollector;
|
|
private static IDisposable s_systemClockChangedHandlerCollector;
|
|
|
|
|
|
|
|
private static int _refCount;
|
|
private static int _refCount;
|
|
@@ -69,13 +64,8 @@ namespace System.Reactive.PlatformServices
|
|
|
{
|
|
{
|
|
|
foreach (var entry in s_systemClockChanged)
|
|
foreach (var entry in s_systemClockChanged)
|
|
|
{
|
|
{
|
|
|
-#if NO_WEAKREFOFT
|
|
|
|
|
- var scheduler = entry.Target as LocalScheduler;
|
|
|
|
|
- if (scheduler != null)
|
|
|
|
|
-#else
|
|
|
|
|
var scheduler = default(LocalScheduler);
|
|
var scheduler = default(LocalScheduler);
|
|
|
if (entry.TryGetTarget(out scheduler))
|
|
if (entry.TryGetTarget(out scheduler))
|
|
|
-#endif
|
|
|
|
|
{
|
|
{
|
|
|
scheduler.SystemClockChanged(sender, e);
|
|
scheduler.SystemClockChanged(sender, e);
|
|
|
}
|
|
}
|
|
@@ -109,11 +99,7 @@ namespace System.Reactive.PlatformServices
|
|
|
//
|
|
//
|
|
|
lock (s_systemClockChanged)
|
|
lock (s_systemClockChanged)
|
|
|
{
|
|
{
|
|
|
-#if NO_WEAKREFOFT
|
|
|
|
|
- s_systemClockChanged.Add(new WeakReference(scheduler, false));
|
|
|
|
|
-#else
|
|
|
|
|
s_systemClockChanged.Add(new WeakReference<LocalScheduler>(scheduler));
|
|
s_systemClockChanged.Add(new WeakReference<LocalScheduler>(scheduler));
|
|
|
-#endif
|
|
|
|
|
|
|
|
|
|
if (s_systemClockChanged.Count == 1)
|
|
if (s_systemClockChanged.Count == 1)
|
|
|
{
|
|
{
|
|
@@ -137,29 +123,16 @@ namespace System.Reactive.PlatformServices
|
|
|
//
|
|
//
|
|
|
lock (s_systemClockChanged)
|
|
lock (s_systemClockChanged)
|
|
|
{
|
|
{
|
|
|
-#if NO_WEAKREFOFT
|
|
|
|
|
- var remove = default(HashSet<WeakReference>);
|
|
|
|
|
-#else
|
|
|
|
|
var remove = default(HashSet<WeakReference<LocalScheduler>>);
|
|
var remove = default(HashSet<WeakReference<LocalScheduler>>);
|
|
|
-#endif
|
|
|
|
|
|
|
|
|
|
foreach (var handler in s_systemClockChanged)
|
|
foreach (var handler in s_systemClockChanged)
|
|
|
{
|
|
{
|
|
|
-#if NO_WEAKREFOFT
|
|
|
|
|
- var scheduler = handler.Target as LocalScheduler;
|
|
|
|
|
- if (scheduler == null)
|
|
|
|
|
-#else
|
|
|
|
|
var scheduler = default(LocalScheduler);
|
|
var scheduler = default(LocalScheduler);
|
|
|
if (!handler.TryGetTarget(out scheduler))
|
|
if (!handler.TryGetTarget(out scheduler))
|
|
|
-#endif
|
|
|
|
|
{
|
|
{
|
|
|
if (remove == null)
|
|
if (remove == null)
|
|
|
{
|
|
{
|
|
|
-#if NO_WEAKREFOFT
|
|
|
|
|
- remove = new HashSet<WeakReference>();
|
|
|
|
|
-#else
|
|
|
|
|
remove = new HashSet<WeakReference<LocalScheduler>>();
|
|
remove = new HashSet<WeakReference<LocalScheduler>>();
|
|
|
-#endif
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
remove.Add(handler);
|
|
remove.Add(handler);
|
|
@@ -254,23 +227,4 @@ namespace System.Reactive.PlatformServices
|
|
|
/// </summary>
|
|
/// </summary>
|
|
|
public DateTimeOffset NewTime { get; private set; }
|
|
public DateTimeOffset NewTime { get; private set; }
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
-#if NO_WEAKREFOFT
|
|
|
|
|
- class WeakReference<T>
|
|
|
|
|
- where T : class
|
|
|
|
|
- {
|
|
|
|
|
- private readonly WeakReference _weakReference;
|
|
|
|
|
-
|
|
|
|
|
- public WeakReference(T value)
|
|
|
|
|
- {
|
|
|
|
|
- _weakReference = new WeakReference(value);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public bool TryGetTarget(out T value)
|
|
|
|
|
- {
|
|
|
|
|
- value = (T)_weakReference.Target;
|
|
|
|
|
- return value != null;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-#endif
|
|
|
|
|
}
|
|
}
|