// ets_tracing: off
import * as Chunk from "../core.js"
import { concreteId } from "../definition.js"
import { forEach_ } from "./forEach.js"
/**
* Splits this chunk into `n` equally sized chunks.
*/
export function split_(
self: Chunk.Chunk,
n: number
): Chunk.Chunk> {
const length = concreteId(self).length
const k = Math.floor(n)
const quotient = Math.floor(length / k)
const remainder = length % k
let chunks = Chunk.empty>()
let i = 0
let chunk = Chunk.empty()
forEach_(self, (a) => {
chunk = Chunk.append_(chunk, a)
if (
(i <= remainder && concreteId(chunk).length > quotient) ||
(i > remainder && concreteId(chunk).length >= quotient)
) {
chunks = Chunk.append_(chunks, chunk)
chunk = Chunk.empty()
}
i++
})
if (concreteId(chunk).length > 0) {
chunks = Chunk.append_(chunks, chunk)
}
return chunks
}
/**
* Splits this chunk into `n` equally sized chunks.
*
* @ets_data_first split_
*/
export function split(
n: number
): (self: Chunk.Chunk) => Chunk.Chunk> {
return (self) => split_(self, n)
}