MCPcopy Create free account
hub / github.com/Effect-TS/effect / SlidingStrategy

Class SlidingStrategy

packages/effect/src/PubSub.ts:2580–2635  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2578 * @since 4.0.0
2579 */
2580export class SlidingStrategy<in out A> implements PubSub.Strategy<A> {
2581 get shutdown(): Effect.Effect<void> {
2582 return Effect.void
2583 }
2584
2585 handleSurplus(
2586 pubsub: PubSub.Atomic<A>,
2587 subscribers: PubSub.Subscribers<A>,
2588 elements: Iterable<A>,
2589 _isShutdown: MutableRef.MutableRef<boolean>
2590 ): Effect.Effect<boolean> {
2591 return Effect.sync(() => {
2592 this.slidingPublishUnsafe(pubsub, elements)
2593 this.completeSubscribersUnsafe(pubsub, subscribers)
2594 return true
2595 })
2596 }
2597
2598 onPubSubEmptySpaceUnsafe(
2599 _pubsub: PubSub.Atomic<A>,
2600 _subscribers: PubSub.Subscribers<A>
2601 ): void {
2602 //
2603 }
2604
2605 completePollersUnsafe(
2606 pubsub: PubSub.Atomic<A>,
2607 subscribers: PubSub.Subscribers<A>,
2608 subscription: PubSub.BackingSubscription<A>,
2609 pollers: MutableList.MutableList<Deferred.Deferred<A>>
2610 ): void {
2611 return strategyCompletePollersUnsafe(this, pubsub, subscribers, subscription, pollers)
2612 }
2613
2614 completeSubscribersUnsafe(pubsub: PubSub.Atomic<A>, subscribers: PubSub.Subscribers<A>): void {
2615 return strategyCompleteSubscribersUnsafe(this, pubsub, subscribers)
2616 }
2617
2618 slidingPublishUnsafe(pubsub: PubSub.Atomic<A>, elements: Iterable<A>): void {
2619 const it = elements[Symbol.iterator]()
2620 let next = it.next()
2621 if (!next.done && pubsub.capacity > 0) {
2622 let a = next.value
2623 let loop = true
2624 while (loop) {
2625 pubsub.slide()
2626 const pub = pubsub.publish(a)
2627 if (pub && (next = it.next()) && !next.done) {
2628 a = next.value
2629 } else if (pub) {
2630 loop = false
2631 }
2632 }
2633 }
2634 }
2635}
2636
2637const strategyCompletePollersUnsafe = <A>(

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected