/** * Low-level buffer attribute utilities for columnar parsing. * * Pure functions that operate on raw Uint8Array buffers to extract * STEP entity attributes without TextDecoder overhead. */ import type { EntityRef } from './types.js'; /** * Find the byte range of a quoted string at a specific attribute position in STEP entity bytes. * Returns [start, end) byte offsets (excluding quotes), or null if not found. * * @param buffer - The IFC file buffer * @param entityStart - byte offset of the entity * @param entityLen - byte length of the entity * @param attrIndex - 0-based attribute index (0=GlobalId, 2=Name) */ export declare function findQuotedAttrRange(buffer: Uint8Array, entityStart: number, entityLen: number, attrIndex: number): [number, number] | null; /** * Skip N commas at depth 0 in STEP bytes. */ export declare function skipCommas(buffer: Uint8Array, start: number, end: number, count: number): number; /** Read a #ID entity reference as a number. Returns -1 if not an entity ref. */ export declare function readRefId(buffer: Uint8Array, pos: number, end: number): [number, number]; /** Read a list of entity refs (#id1,#id2,...) or a single #id. Returns [ids, newPos]. */ export declare function readRefList(buffer: Uint8Array, pos: number, end: number): [number[], number]; /** * Batch extract GlobalId (attr[0]) and Name (attr[2]) for many entities using * only 2 TextDecoder.decode() calls total (one for all GlobalIds, one for all Names). * * This is ~100x faster than calling extractEntity() per entity for large batches * because it eliminates per-entity TextDecoder overhead which is significant in Firefox. * * Returns a Map from expressId → { globalId, name }. */ export declare function batchExtractGlobalIdAndName(buffer: Uint8Array, refs: EntityRef[], yieldIfNeeded?: () => Promise): Promise>; //# sourceMappingURL=columnar-parser-attributes.d.ts.map