import type { AccessorFactory, ColumnBinding, ComponentDef, ComponentId, EntityHandle, Schema } from '@ecsia/schema'; import type { Backing, ColumnLayout, TypedArray } from '../memory/index.js'; import { columnKey } from '../memory/index.js'; import type { SidecarKey } from './sidecar.js'; export interface AccessorWorld { trackWrite(index: number, componentId: ComponentId, fieldIndex?: number): void; handleIndex(handle: EntityHandle): number; readonly tracking: { readonly active: boolean; }; sidecarRead(key: SidecarKey, index: number, gen: number): unknown; sidecarWrite(key: SidecarKey, index: number, gen: number, value: unknown): void; /** The generation embedded in `handle` — the RF-HYGIENE stamp source. For a live entity this equals * the index's live generation; for an observer-window ref bound to a DYING handle it names the dead * tenant, so its rich reads hit the pending-clear stash and never alias a same-window re-mint. */ handleGeneration(handle: EntityHandle): number; } export interface AccessorBinding { readonly world: AccessorWorld; readonly componentId: ComponentId; } export interface AccessorInstanceBase { __idx: number; __eid: EntityHandle; __binding: AccessorBinding | null; __rebind(newBacking: Backing): void; /** * Fallback-grow rebind for ONE column. Each column-bearing field owns a SEPARATE backing buffer * (one `buffers.column` per field), so a fallback grow re-points exactly that field's view. A * whole-instance `__rebind` would alias every field onto the single grown backing (corrupting the * other fields' columns); the buffers layer always targets the field that actually grew. */ __rebindField(fieldIndex: number, newBacking: Backing): void; } export declare function bindingsFor(columns: ReadonlyArray<{ view: TypedArray; layout: ColumnLayout; }>): ColumnBinding[]; export declare function makeAccessorFactory(def: ComponentDef): AccessorFactory; export { columnKey }; export type { ColumnKey } from '../memory/index.js'; //# sourceMappingURL=accessor.d.ts.map