Skip to content

Replace QuaternaryChange types with ChangeSet#192

Merged
ChrisPulman merged 2 commits intomainfrom
ExtendFunctionality
Feb 3, 2026
Merged

Replace QuaternaryChange types with ChangeSet#192
ChrisPulman merged 2 commits intomainfrom
ExtendFunctionality

Conversation

@ChrisPulman
Copy link
Owner

Replace the custom QuaternaryChange/QuaternaryChangeSet/QuaternaryChangeReason API with the unified Change/ChangeSet model across the quaternary code. Removed QuaternaryChange*, QuaternaryChangeReason and QuaternaryChangeSet files and updated interfaces, events and observables (IQuad, QuadList, QuadDictionary, QuaternaryList, QuaternaryExtensions, SecondaryIndex, ReactiveView, etc.) to use Change/ChangeSet.
Adjusted several APIs to use non-nullable item parameters and updated ReactiveView/indices to match.
Also made a thread-safety tweak for subscriber tracking (volatile bool -> int with Interlocked) and simplified Connect() to return the unified Changes directly.
Remove per-shard ChangeSet/ItemChanged events and IObservable Changes from QuadList/QuadDictionary/IQuad and move change notification responsibility to the parent QuaternaryBase Stream pipeline.
Add documentation clarifying quads are internal shard containers (no independent notifications).
Introduce IQuaternarySource.Version for lightweight change detection, replace Interlocked.Exchange with Volatile.Write when marking Stream subscribers, remove direct System.Reactive.Linq dependencies, and add a few MethodImpl(AggressiveInlining) hints. Update extension methods and AutoRefresh to work with CacheNotify/Stream semantics and simplify QuaternaryList constructor (no merging of shard observables).
These changes centralize event delivery, reduce allocations, and clarify internal shard responsibilities.

Replace the custom QuaternaryChange/QuaternaryChangeSet/QuaternaryChangeReason API with the unified Change/ChangeSet model across the quaternary code. Removed QuaternaryChange*, QuaternaryChangeReason and QuaternaryChangeSet files and updated interfaces, events and observables (IQuad, QuadList, QuadDictionary, QuaternaryList, QuaternaryExtensions, SecondaryIndex, ReactiveView, etc.) to use Change<T>/ChangeSet<T>. Adjusted several APIs to use non-nullable item parameters and updated ReactiveView/indices to match. Also made a thread-safety tweak for subscriber tracking (volatile bool -> int with Interlocked) and simplified Connect() to return the unified Changes directly.
Remove per-shard ChangeSet/ItemChanged events and IObservable Changes from QuadList/QuadDictionary/IQuad and move change notification responsibility to the parent QuaternaryBase Stream pipeline. Add documentation clarifying quads are internal shard containers (no independent notifications). Introduce IQuaternarySource.Version for lightweight change detection, replace Interlocked.Exchange with Volatile.Write when marking Stream subscribers, remove direct System.Reactive.Linq dependencies, and add a few MethodImpl(AggressiveInlining) hints. Update extension methods and AutoRefresh to work with CacheNotify<T>/Stream semantics and simplify QuaternaryList constructor (no merging of shard observables). These changes centralize event delivery, reduce allocations, and clarify internal shard responsibilities.
@ChrisPulman ChrisPulman merged commit 8988455 into main Feb 3, 2026
1 check passed
@ChrisPulman ChrisPulman deleted the ExtendFunctionality branch February 3, 2026 20:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant