com.fofx.observething 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/README.md +2 -0
  2. package/README.md.meta +7 -0
  3. package/Runtime/CollectionIdProvider.cs +72 -0
  4. package/Runtime/CollectionIdProvider.cs.meta +2 -0
  5. package/Runtime/IObservable.cs +66 -0
  6. package/Runtime/IObservable.cs.meta +2 -0
  7. package/Runtime/Implementations/Observable.cs +30 -0
  8. package/Runtime/Implementations/Observable.cs.meta +2 -0
  9. package/Runtime/Implementations/ObservableBase.cs +173 -0
  10. package/Runtime/Implementations/ObservableBase.cs.meta +2 -0
  11. package/Runtime/Implementations/ObservableCollection.cs +141 -0
  12. package/Runtime/Implementations/ObservableCollection.cs.meta +2 -0
  13. package/Runtime/Implementations/ObservableDictionary.cs +166 -0
  14. package/Runtime/Implementations/ObservableDictionary.cs.meta +2 -0
  15. package/Runtime/Implementations/ObservableList.cs +163 -0
  16. package/Runtime/Implementations/ObservableList.cs.meta +2 -0
  17. package/Runtime/Implementations/ObservableSet.cs +137 -0
  18. package/Runtime/Implementations/ObservableSet.cs.meta +2 -0
  19. package/Runtime/Implementations/ObservableValue.cs +59 -0
  20. package/Runtime/Implementations/ObservableValue.cs.meta +2 -0
  21. package/Runtime/Implementations.meta +8 -0
  22. package/Runtime/Observables/BatchObservable.cs +72 -0
  23. package/Runtime/Observables/BatchObservable.cs.meta +2 -0
  24. package/Runtime/Observables/CastObservable.cs +128 -0
  25. package/Runtime/Observables/CastObservable.cs.meta +2 -0
  26. package/Runtime/Observables/CombineObservable.cs +96 -0
  27. package/Runtime/Observables/CombineObservable.cs.meta +2 -0
  28. package/Runtime/Observables/CombineValueObservable.cs +319 -0
  29. package/Runtime/Observables/CombineValueObservable.cs.meta +2 -0
  30. package/Runtime/Observables/ConcatObservable.cs +75 -0
  31. package/Runtime/Observables/ConcatObservable.cs.meta +2 -0
  32. package/Runtime/Observables/ContainsObservable.cs +71 -0
  33. package/Runtime/Observables/ContainsObservable.cs.meta +2 -0
  34. package/Runtime/Observables/CountObservable.cs +29 -0
  35. package/Runtime/Observables/CountObservable.cs.meta +2 -0
  36. package/Runtime/Observables/DistinctObservable.cs +55 -0
  37. package/Runtime/Observables/DistinctObservable.cs.meta +2 -0
  38. package/Runtime/Observables/FirstObservable.cs +53 -0
  39. package/Runtime/Observables/FirstObservable.cs.meta +2 -0
  40. package/Runtime/Observables/IndexOfObservable.cs +83 -0
  41. package/Runtime/Observables/IndexOfObservable.cs.meta +2 -0
  42. package/Runtime/Observables/OperationStreamObservable.cs +194 -0
  43. package/Runtime/Observables/OperationStreamObservable.cs.meta +2 -0
  44. package/Runtime/Observables/OrderByObservable.cs +116 -0
  45. package/Runtime/Observables/OrderByObservable.cs.meta +2 -0
  46. package/Runtime/Observables/SelectCollectionObservable.cs +29 -0
  47. package/Runtime/Observables/SelectCollectionObservable.cs.meta +2 -0
  48. package/Runtime/Observables/SelectListObservable.cs +29 -0
  49. package/Runtime/Observables/SelectListObservable.cs.meta +2 -0
  50. package/Runtime/Observables/SelectManyObservable.cs +78 -0
  51. package/Runtime/Observables/SelectManyObservable.cs.meta +2 -0
  52. package/Runtime/Observables/SelectValueObservable.cs +28 -0
  53. package/Runtime/Observables/SelectValueObservable.cs.meta +2 -0
  54. package/Runtime/Observables/SkipWhileObservable.cs +32 -0
  55. package/Runtime/Observables/SkipWhileObservable.cs.meta +2 -0
  56. package/Runtime/Observables/ThenObservable.cs +209 -0
  57. package/Runtime/Observables/ThenObservable.cs.meta +2 -0
  58. package/Runtime/Observables/ToDictionaryObservable.cs +35 -0
  59. package/Runtime/Observables/ToDictionaryObservable.cs.meta +2 -0
  60. package/Runtime/Observables/TrackObservable.cs +74 -0
  61. package/Runtime/Observables/TrackObservable.cs.meta +2 -0
  62. package/Runtime/Observables/UnwrapCollectionObservable.cs +64 -0
  63. package/Runtime/Observables/UnwrapCollectionObservable.cs.meta +2 -0
  64. package/Runtime/Observables/UnwrapListObservable.cs +69 -0
  65. package/Runtime/Observables/UnwrapListObservable.cs.meta +2 -0
  66. package/Runtime/Observables/UnwrapValueObservable.cs +56 -0
  67. package/Runtime/Observables/UnwrapValueObservable.cs.meta +2 -0
  68. package/Runtime/Observables/WhereObservable.cs +85 -0
  69. package/Runtime/Observables/WhereObservable.cs.meta +2 -0
  70. package/Runtime/Observables/WithPreviousObservable.cs +36 -0
  71. package/Runtime/Observables/WithPreviousObservable.cs.meta +2 -0
  72. package/Runtime/Observables.cs +467 -0
  73. package/Runtime/Observables.cs.meta +2 -0
  74. package/Runtime/Observables.meta +8 -0
  75. package/Runtime/ObservationContext.cs +126 -0
  76. package/Runtime/ObservationContext.cs.meta +2 -0
  77. package/Runtime/Observers.cs +403 -0
  78. package/Runtime/Observers.cs.meta +2 -0
  79. package/Runtime/Operators/BatchOperator.cs +71 -0
  80. package/Runtime/Operators/BatchOperator.cs.meta +2 -0
  81. package/Runtime/Operators/CollectionOperator.cs +30 -0
  82. package/Runtime/Operators/CollectionOperator.cs.meta +2 -0
  83. package/Runtime/Operators/DictionaryOperator.cs +45 -0
  84. package/Runtime/Operators/DictionaryOperator.cs.meta +2 -0
  85. package/Runtime/Operators/IInitializationOperationsProvider.cs +10 -0
  86. package/Runtime/Operators/IInitializationOperationsProvider.cs.meta +2 -0
  87. package/Runtime/Operators/ListOperator.cs +44 -0
  88. package/Runtime/Operators/ListOperator.cs.meta +2 -0
  89. package/Runtime/Operators/ObservableOperator.cs +75 -0
  90. package/Runtime/Operators/ObservableOperator.cs.meta +2 -0
  91. package/Runtime/Operators/Operator.cs +65 -0
  92. package/Runtime/Operators/Operator.cs.meta +2 -0
  93. package/Runtime/Operators/SetOperator.cs +44 -0
  94. package/Runtime/Operators/SetOperator.cs.meta +2 -0
  95. package/Runtime/Operators/ValueOperator.cs +30 -0
  96. package/Runtime/Operators/ValueOperator.cs.meta +2 -0
  97. package/Runtime/Operators.meta +8 -0
  98. package/Runtime/PriorityQueue.cs +1096 -0
  99. package/Runtime/PriorityQueue.cs.meta +2 -0
  100. package/Runtime/com.fofx.observething.asmdef +14 -0
  101. package/Runtime/com.fofx.observething.asmdef.meta +7 -0
  102. package/Runtime.meta +8 -0
  103. package/Tests/CollectionObservableTests.cs +739 -0
  104. package/Tests/CollectionObservableTests.cs.meta +2 -0
  105. package/Tests/DictionaryObservableTests.cs +85 -0
  106. package/Tests/DictionaryObservableTests.cs.meta +2 -0
  107. package/Tests/ListObservableTests.cs +148 -0
  108. package/Tests/ListObservableTests.cs.meta +2 -0
  109. package/Tests/ObservationContextTests.cs +359 -0
  110. package/Tests/ObservationContextTests.cs.meta +2 -0
  111. package/Tests/ValueObservableTests.cs +322 -0
  112. package/Tests/ValueObservableTests.cs.meta +2 -0
  113. package/Tests/com.fofx.observething.tests.asmdef +24 -0
  114. package/Tests/com.fofx.observething.tests.asmdef.meta +7 -0
  115. package/Tests.meta +8 -0
  116. package/package.json +24 -0
  117. package/package.json.meta +7 -0
@@ -0,0 +1,75 @@
1
+ using System;
2
+ using System.Collections.Generic;
3
+
4
+ namespace ObserveThing
5
+ {
6
+ public class ObservableOperator<T> : IObservable<T>, IInitializationOperationsProvider<T> where T : IOperation
7
+ {
8
+ public ObservationContext context { get; }
9
+
10
+ private Func<Observable<T>, IInitializationOperationsProvider<T>> _generateOperator;
11
+ protected Observable<T> _observable { get; private set; }
12
+ private IInitializationOperationsProvider<T> _operator;
13
+ private bool _active = false;
14
+ private List<IObserverBase> _observers = new List<IObserverBase>();
15
+ private bool _disposed;
16
+
17
+ public ObservableOperator(ObservationContext context, Func<Observable<T>, IInitializationOperationsProvider<T>> generateOperator)
18
+ {
19
+ this.context = context;
20
+ _generateOperator = generateOperator;
21
+ }
22
+
23
+ public void Dispose()
24
+ {
25
+ if (_disposed)
26
+ return;
27
+
28
+ _disposed = true;
29
+
30
+ _operator?.Dispose();
31
+ _operator = default;
32
+
33
+ _observable?.Dispose();
34
+ _observable = default;
35
+ }
36
+
37
+ protected void AddObserver(IObserverBase observer)
38
+ {
39
+ _observers.Add(observer);
40
+
41
+ if (_active)
42
+ return;
43
+
44
+ _active = true;
45
+ _observable = new Observable<T>(context, this);
46
+ _operator = _generateOperator(_observable);
47
+ }
48
+
49
+ protected void RemoveObserver(IObserverBase observer)
50
+ {
51
+ _observers.Remove(observer);
52
+
53
+ if (_active && _observers.Count == 0)
54
+ {
55
+ _active = false;
56
+
57
+ _operator.Dispose();
58
+ _operator = default;
59
+
60
+ _observable.Dispose();
61
+ _observable = default;
62
+ }
63
+ }
64
+
65
+ public IDisposable Subscribe(IObserver<T> observer, bool immediate = false, uint? priority = null)
66
+ {
67
+ AddObserver(observer);
68
+ var subscription = _observable.Subscribe(observer, immediate, priority);
69
+ return new ComposedDisposable(subscription, new Disposable(() => RemoveObserver(observer)));
70
+ }
71
+
72
+ public IEnumerable<T> GetInitializationOperations()
73
+ => _operator.GetInitializationOperations();
74
+ }
75
+ }
@@ -0,0 +1,2 @@
1
+ fileFormatVersion: 2
2
+ guid: 1ec04daf0e0973d49ba1defef83e82f1
@@ -0,0 +1,65 @@
1
+ using System;
2
+ using System.Collections.Generic;
3
+
4
+ namespace ObserveThing
5
+ {
6
+ public class Operator<T> where T : class, IDisposable, new()
7
+ {
8
+ public ObservationContext context { get; }
9
+
10
+ private Func<T, IDisposable> _generateOperator;
11
+ protected T _observable { get; private set; }
12
+ private IDisposable _operator;
13
+ private bool _active = false;
14
+ private List<IObserverBase> _observers = new List<IObserverBase>();
15
+ private bool _disposed;
16
+
17
+ public Operator(ObservationContext context, Func<T, IDisposable> generateOperator)
18
+ {
19
+ this.context = context;
20
+ _generateOperator = generateOperator;
21
+ }
22
+
23
+ public void Dispose()
24
+ {
25
+ if (_disposed)
26
+ return;
27
+
28
+ _disposed = true;
29
+
30
+ _operator?.Dispose();
31
+ _operator = default;
32
+
33
+ _observable?.Dispose();
34
+ _observable = default;
35
+ }
36
+
37
+ protected void AddObserver(IObserverBase observer)
38
+ {
39
+ _observers.Add(observer);
40
+
41
+ if (_active)
42
+ return;
43
+
44
+ _active = true;
45
+ _observable = new T();
46
+ _operator = _generateOperator(_observable);
47
+ }
48
+
49
+ protected void RemoveObserver(IObserverBase observer)
50
+ {
51
+ _observers.Remove(observer);
52
+
53
+ if (_active && _observers.Count == 0)
54
+ {
55
+ _active = false;
56
+
57
+ _operator.Dispose();
58
+ _operator = default;
59
+
60
+ _observable.Dispose();
61
+ _observable = default;
62
+ }
63
+ }
64
+ }
65
+ }
@@ -0,0 +1,2 @@
1
+ fileFormatVersion: 2
2
+ guid: 9867377b6bdc8b148aee5ec4f589021b
@@ -0,0 +1,44 @@
1
+ using System;
2
+
3
+ namespace ObserveThing
4
+ {
5
+ public class SetOperator<T> : Operator<ObservableSet<T>>, ISetObservable<T>
6
+ {
7
+ public SetOperator(ObservationContext context, Func<ObservableSet<T>, IDisposable> generateOperator) : base(context, generateOperator) { }
8
+
9
+ public IDisposable Subscribe(ISetObserver<T> observer, bool immediate = false, uint? priority = null)
10
+ {
11
+ AddObserver(observer);
12
+ var subscription = ((ISetObservable<T>)_observable).Subscribe(observer, immediate, priority);
13
+ return new ComposedDisposable(subscription, new Disposable(() => RemoveObserver(observer)));
14
+ }
15
+
16
+ public IDisposable Subscribe(ISetObserver observer, bool immediate = false, uint? priority = null)
17
+ {
18
+ AddObserver(observer);
19
+ var subscription = ((ISetObservable)_observable).Subscribe(observer, immediate, priority);
20
+ return new ComposedDisposable(subscription, new Disposable(() => RemoveObserver(observer)));
21
+ }
22
+
23
+ public IDisposable Subscribe(ICollectionObserver<T> observer, bool immediate = false, uint? priority = null)
24
+ {
25
+ AddObserver(observer);
26
+ var subscription = ((ICollectionObservable<T>)_observable).Subscribe(observer, immediate, priority);
27
+ return new ComposedDisposable(subscription, new Disposable(() => RemoveObserver(observer)));
28
+ }
29
+
30
+ public IDisposable Subscribe(ICollectionObserver observer, bool immediate = false, uint? priority = null)
31
+ {
32
+ AddObserver(observer);
33
+ var subscription = ((ICollectionObservable)_observable).Subscribe(observer, immediate, priority);
34
+ return new ComposedDisposable(subscription, new Disposable(() => RemoveObserver(observer)));
35
+ }
36
+
37
+ public IDisposable Subscribe(IObserver<IOperation> observer, bool immediate = false, uint? priority = null)
38
+ {
39
+ AddObserver(observer);
40
+ var subscription = ((IObservable<IOperation>)_observable).Subscribe(observer, immediate, priority);
41
+ return new ComposedDisposable(subscription, new Disposable(() => RemoveObserver(observer)));
42
+ }
43
+ }
44
+ }
@@ -0,0 +1,2 @@
1
+ fileFormatVersion: 2
2
+ guid: 5e35d2b9dd4542a46a447872dc757018
@@ -0,0 +1,30 @@
1
+ using System;
2
+
3
+ namespace ObserveThing
4
+ {
5
+ public class ValueOperator<T> : Operator<ObservableValue<T>>, IValueObservable<T>
6
+ {
7
+ public ValueOperator(ObservationContext context, Func<ObservableValue<T>, IDisposable> generateOperator) : base(context, generateOperator) { }
8
+
9
+ public IDisposable Subscribe(IValueObserver<T> observer, bool immediate = false, uint? priority = null)
10
+ {
11
+ AddObserver(observer);
12
+ var subscription = ((IValueObservable<T>)_observable).Subscribe(observer, immediate, priority);
13
+ return new ComposedDisposable(subscription, new Disposable(() => RemoveObserver(observer)));
14
+ }
15
+
16
+ public IDisposable Subscribe(IValueObserver observer, bool immediate = false, uint? priority = null)
17
+ {
18
+ AddObserver(observer);
19
+ var subscription = ((IValueObservable)_observable).Subscribe(observer, immediate, priority);
20
+ return new ComposedDisposable(subscription, new Disposable(() => RemoveObserver(observer)));
21
+ }
22
+
23
+ public IDisposable Subscribe(IObserver<IOperation> observer, bool immediate = false, uint? priority = null)
24
+ {
25
+ AddObserver(observer);
26
+ var subscription = ((IObservable<IOperation>)_observable).Subscribe(observer, immediate, priority);
27
+ return new ComposedDisposable(subscription, new Disposable(() => RemoveObserver(observer)));
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,2 @@
1
+ fileFormatVersion: 2
2
+ guid: 61e0b2188c1fadd4c8a402cd1471ccc1
@@ -0,0 +1,8 @@
1
+ fileFormatVersion: 2
2
+ guid: 3ae21d6453380e84b8f13e08d4f9e949
3
+ folderAsset: yes
4
+ DefaultImporter:
5
+ externalObjects: {}
6
+ userData:
7
+ assetBundleName:
8
+ assetBundleVariant: