import type { Indices, Slice } from "./types.js";
export declare function normalizeIntegerSelection(dimSel: number, dimLen: number): number;
interface IntChunkDimProjection {
    dimChunkIx: number;
    dimChunkSel: number;
}
interface IntDimIndexerProps {
    dimSel: number;
    dimLen: number;
    dimChunkLen: number;
}
declare class IntDimIndexer {
    dimSel: number;
    dimLen: number;
    dimChunkLen: number;
    nitems: 1;
    constructor({ dimSel, dimLen, dimChunkLen }: IntDimIndexerProps);
    [Symbol.iterator](): IterableIterator<IntChunkDimProjection>;
}
interface SliceChunkDimProjection {
    dimChunkIx: number;
    dimChunkSel: Indices;
    dimOutSel: Indices;
}
interface SliceDimIndexerProps {
    dimSel: Slice;
    dimLen: number;
    dimChunkLen: number;
}
declare class SliceDimIndexer {
    start: number;
    stop: number;
    step: number;
    dimLen: number;
    dimChunkLen: number;
    nitems: number;
    nchunks: number;
    constructor({ dimSel, dimLen, dimChunkLen }: SliceDimIndexerProps);
    [Symbol.iterator](): IterableIterator<SliceChunkDimProjection>;
}
export declare function normalizeSelection(selection: null | (Slice | null | number)[], shape: readonly number[]): (number | Slice)[];
interface BasicIndexerProps {
    selection: null | (null | number | Slice)[];
    shape: readonly number[];
    chunkShape: readonly number[];
}
export type IndexerProjection = {
    from: number;
    to: null;
} | {
    from: Indices;
    to: Indices;
};
interface ChunkProjection {
    chunkCoords: number[];
    mapping: IndexerProjection[];
}
export declare class BasicIndexer {
    dimIndexers: (SliceDimIndexer | IntDimIndexer)[];
    shape: number[];
    constructor({ selection, shape, chunkShape }: BasicIndexerProps);
    [Symbol.iterator](): IterableIterator<ChunkProjection>;
}
export {};
//# sourceMappingURL=indexer.d.ts.map