MCPcopy Index your code
hub / github.com/Effect-TS/effect / takeRemainder

Function takeRemainder

packages/effect/src/internal/stm/tQueue.ts:336–369  ·  view source on GitHub ↗
(
        min: number,
        max: number,
        acc: Chunk.Chunk<A>
      )

Source from the content-addressed store, hash-verified

334 <A>(self: TQueue.TDequeue<A>, min: number, max: number): STM.STM<Array<A>> =>
335 stm.suspend(() => {
336 const takeRemainder = (
337 min: number,
338 max: number,
339 acc: Chunk.Chunk<A>
340 ): STM.STM<Chunk.Chunk<A>> => {
341 if (max < min) {
342 return core.succeed(acc)
343 }
344 return pipe(
345 self.takeUpTo(max),
346 core.flatMap((taken) => {
347 const remaining = min - taken.length
348 if (remaining === 1) {
349 return pipe(
350 self.take,
351 core.map((a) => pipe(acc, Chunk.appendAll(Chunk.unsafeFromArray(taken)), Chunk.append(a)))
352 )
353 }
354 if (remaining > 1) {
355 return pipe(
356 self.take,
357 core.flatMap((a) =>
358 takeRemainder(
359 remaining - 1,
360 max - taken.length - 1,
361 pipe(acc, Chunk.appendAll(Chunk.unsafeFromArray(taken)), Chunk.append(a))
362 )
363 )
364 )
365 }
366 return core.succeed(pipe(acc, Chunk.appendAll(Chunk.unsafeFromArray(taken))))
367 })
368 )
369 }
370 return core.map(takeRemainder(min, max, Chunk.empty<A>()), (c) => Array.from(c))
371 })
372)

Callers 1

tQueue.tsFile · 0.85

Calls 3

takeUpToMethod · 0.65
mapMethod · 0.65
pipeFunction · 0.50

Tested by

no test coverage detected